Laden...

Wie abfangen - The process cannot access the file because it is being used by another process

Erstellt von mosspower vor 15 Jahren Letzter Beitrag vor 15 Jahren 925 Views
mosspower Themenstarter:in
456 Beiträge seit 2007
vor 15 Jahren
Wie abfangen - The process cannot access the file because it is being used by another process

Hallo,

ihr kennt sicherlich diesen IO-Fehler. Wie aber kann man genau diesen abfangen, wenn ich auch andere IO-Fehler handeln möchte? OK, eine Idee wäre, die CultureInfo vor dem Zugriff umzuswitchen und den Fehlertext lesen - aber das kann es ja nicht sein - gibt es hierfür einen Workaround oder sogar einen Errorcode?

Gruß und Danke schon einmal im Voraus für etwaige Antworten

Gelöschter Account
vor 15 Jahren

ungetestet:

catch(UnouthorizedAccessException)
{
// hier versuchen
}
catch(IoException)
{
....
}
mosspower Themenstarter:in
456 Beiträge seit 2007
vor 15 Jahren

Hallo JAck30lena,

Nein, leider nicht, geht immer in die IOException rein ...

hier ein Beispiel ...

static void Main(string[] args) {
      try {
        new Thread(Read).Start();
        new Thread(Read).Start();
      }
      catch(Exception ex) {
        Console.WriteLine("Fehler " + ex.Message);
      }

      Console.WriteLine("Done ");
      Console.ReadLine();
    }

    public static void Read() {
      TextWriter textWriter = null;

      while(true) {
        try {
          textWriter = new StreamWriter(@"C:/test.txt");
          textWriter.WriteLine("blub");
          textWriter.Flush();
          Thread.Sleep(1);
        }
        catch(UnauthorizedAccessException ex) {
          Console.WriteLine(ex.GetType().FullName);
        }
        catch(Exception ex) {
          Console.WriteLine(ex.GetType().FullName);
        }
        finally {
          try {
            textWriter.Close();
          }
          catch {
            // Blub
          }
         
        }
      }
    }
Gelöschter Account
vor 15 Jahren

du könntest die api methode getlastwindowserror aufrufen und so kommst du vielleicht an den spezifischen errorcode ran.

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 15 Jahren

bin leider auch nicht an die nötigen Infos rangekommen, naja, ich habe eine Utilitymethode gecoded ...

 public static bool IsFileUsedByOnotherProcess(Exception ex) {
      bool isUsedByOtherProcess = false;

      if(ex != null && ex is IOException) {
        // Check global settings
        CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
        CultureInfo defaultCulture = GlobalizationUtil.GetDefaultCulture();

        if(!currentCulture.DisplayName.
          Equals(defaultCulture.DisplayName)) {
          // Switch culture
          Thread.CurrentThread.CurrentCulture = defaultCulture;
        }

        isUsedByOtherProcess = Program.FILE_USED_REG_EX.IsMatch(ex.Message);
        
        // Reswitch culture
        Thread.CurrentThread.CurrentCulture = currentCulture;
      }

      return isUsedByOtherProcess;
    }