Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Wie abfangen - The process cannot access the file because it is being used by another process
mosspower
myCSharp.de - Member

Avatar #avatar-2662.jpg


Dabei seit:
Beiträge: 456
Herkunft: Bamberg

Themenstarter:

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

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

ungetestet:

catch(UnouthorizedAccessException)
{
// hier versuchen
}
catch(IoException)
{
....
}
mosspower
myCSharp.de - Member

Avatar #avatar-2662.jpg


Dabei seit:
Beiträge: 456
Herkunft: Bamberg

Themenstarter:

beantworten | zitieren | melden

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
          }
         
        }
      }
    }
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

du könntest die api methode getlastwindowserror aufrufen und so kommst du vielleicht an den spezifischen errorcode ran.
mosspower
myCSharp.de - Member

Avatar #avatar-2662.jpg


Dabei seit:
Beiträge: 456
Herkunft: Bamberg

Themenstarter:

beantworten | zitieren | melden

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;
    }
private Nachricht | Beiträge des Benutzers