Я записываю свою отладочную информацию в файл, используя отдельный поток.Во время запуска я люблю делать резервные копии любого предыдущего файла.К сожалению, кажется, что ОС зависает на дескрипторе файла в течение неопределенного времени, поэтому, когда я пытаюсь записать файл, происходит сбой.
Я использую C #, .Net Framework 3.5 на Windows XP.(Vista и Win7 имеют ту же проблему).
Вот код, который устраняет проблему, где t
выдает исключение System.IO.IOException: «Процесс не может получить доступ к файлу» C: \ deleteMe.txt ', поскольку он используется другим процессом. "
public class WriteToFile {
static void Main(){
String filename=@"C:\deleteMe.txt";
String filenameBackup = @"C:\deleteMe (backup).txt";
String value = "this is a test value";
//MAKE FILE
fillFile(filename, value);
//MAKE A THREAD TO WRITE TO FILE, WHEN READY
Semaphore readyToWrite=new Semaphore(1, 1);
var t=new Thread(
new ThreadStart(delegate(){
readyToWrite.WaitOne();
WriteToFile.fillFile(filename, value);
})
);
t.Priority=ThreadPriority.Highest;
t.Start();
//BACKUP FILE
if (File.Exists(filename)) {
File.Delete(filenameBackup);
File.Copy(filename, filenameBackup);
File.Delete(filename);
}//endif
//SIGNAL THREAD TO WRITE TO FILE
readyToWrite.Release();
}//method
public static void fillFile(String filename, String value) {
try {
StreamWriter w = File.AppendText(filename);
using (w) {
w.Write(value);
w.Flush();
}//using
} catch (Exception e) {
throw new Exception("Can not write to file", e);
}//try
}//method
}//class
Спасибо!