2015-12-21 1 views
0

Je lance Console_Application-A dans lequel j'appelle une autre Console_Application-B (dans laquelle je crée un journal fichier pour Erreur/Exception). Mais lorsque j'utilise Console_Application-B individuellement, cela fonctionne correctement, mais lorsque j'utilise Console_Application-A à ce moment-là, je reçois une exception lorsque l'application doit écrire une erreur dans le fichier journal (Error.txt).IOException: Le processus ne peut pas accéder au fichier 'chemin du fichier' car il est utilisé par un autre processus dans Console Application in C#

IOException: Le processus ne peut pas accéder au fichier « error.txt » parce qu'il est utilisé par un autre processus

s'il vous plaît me guider dans ce numéro.

Code pour journal des erreurs d'écriture

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

Les deux applications ont accès au même fichier en même temps? – Sybren

+0

ajoutez votre code pour écrire dans le fichier journal. –

+0

Non Les deux applications utilisent des fichiers différents –

Répondre

0

Il n'y a pas besoin pour vérifier si le fichier est verrouillé puis y accéder, entre le contrôle et l'accès d'un autre processus peut toujours avoir un verrou sur le fichier.

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

Source - https://msdn.microsoft.com/en-us/library/3zc0w663(v=vs.110).aspx