2015-12-21 43 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

相關問題