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
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
}
}
}
}
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;
}