2015-12-21 6 views
0

Я запускаю Console_Application-A, в котором я вызываю другой Console_Application-B (в котором я создаю журнал файл для ошибки/исключения).IOException: процесс не может получить доступ к файлу «путь к файлу», потому что он используется другим процессом в консольном приложении в C#

Но когда я запускаю Console_Application-B отдельно, он работает нормально, но когда я запускаю Console_Application-A, в то время я получаю исключение, когда приложение должно записывать ошибку в файле журнала. (Error.txt).

IOException: Процесс не может получить доступ к файлу «error.txt», потому что используется другим процессом

, пожалуйста, руководство меня в этом вопросе.

Код для написания протокола ошибок

public static bool IsFileLocked(FileInfo file) 
{ 
FileStream stream = null; 
try 
{ 
stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None); 
} 
catch (IOException) 
{ 
    return true; 
} 
finally 
{ 
    if (stream != null) 
    stream.Close(); 
    } 
    return false; 
} 

catch (Exception e) 
{ 
    string filePath =Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\Error.txt"; 

FileInfo FInfo = new FileInfo(filePath); 
var FileState = IsFileLocked(FInfo); 

while (FileState){ 
FileState = IsFileLocked(FInfo); 
} 
if (!FileState){ 
using (StreamWriter writer = new StreamWriter(filePath, true)) 
{ 
writer.WriteLine("Message :" + e.Message + "<br/>" + Environment.NewLine + "StackTrace :" + e.StackTrace +"" + Environment.NewLine + "Date :" + DateTime.Now.ToString()); 
writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine); 
writer.Dispose(); 
} 
} 
} 
+2

Оба приложения обращаются к одному файлу в то же время? – Sybren

+0

Добавьте свой код для записи в файл журнала. –

+0

Нет Оба приложения используют разные файлы –

ответ

0

Там нет необходимости сначала проверить, если файл заблокирован, а затем получить доступ к нему, так как между проверкой и доступа какой-либо другой процесс может все равно получить блокировку файла.

using System; 
using System.IO; 

class DirAppend 
{ 
    public static void Main() 
    { 
     using (StreamWriter w = File.AppendText("log.txt")) 
     { 
      Log("Test1", w); 
      Log("Test2", w); 
     } 

     using (StreamReader r = File.OpenText("log.txt")) 
     { 
      DumpLog(r); 
     } 
    } 

    public static void Log(string logMessage, TextWriter w) 
    { 
     w.Write("\r\nLog Entry : "); 
     w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), 
      DateTime.Now.ToLongDateString()); 
     w.WriteLine(" :"); 
     w.WriteLine(" :{0}", logMessage); 
     w.WriteLine ("-------------------------------"); 
    } 

    public static void DumpLog(StreamReader r) 
    { 
     string line; 
     while ((line = r.ReadLine()) != null) 
     { 
      Console.WriteLine(line); 
     } 
    } 
} 

Источник - https://msdn.microsoft.com/en-us/library/3zc0w663(v=vs.110).aspx