2016-08-12 4 views
0

Пусть у меня есть программа, открывающая файл и добавляющая что-то. Если я должен запустить две утилиты, я получу файл IOException, используемый другим процессом. Как можно проверить, что файл Log.txt используется другим процессом?C# файл проверки, который используется процессом

class Program 
{ 
    static void Main(string[] args) 
    { 
     FileInfo file = new FileInfo(@"D:\Log.txt"); 
     using (StreamWriter sw = file.AppendText()) 
     { 
      for (int i = 0; i < 1000; i++) 
      { 
       System.Threading.Thread.Sleep(100); 
       sw.WriteLine("Hello"); 
       sw.WriteLine("And"); 
       sw.WriteLine("Welcome"); 
      } 
      Console.WriteLine("The work is done"); 
     } 
    } 
} 
+0

Вы хотите проверить _if_, файл используется другим процессом или вы хотите проверить, что _what_-процесс использует его? –

+0

@VisualVincent, я хочу проверить, если состояние. – A191919

+0

Тогда Try/Catch - ваше решение. Сам дал хороший ответ. –

ответ

3

Вам следует попробовать открыть и написать файл. Если он используется, вы получаете исключение. В .NET нет другого способа.

protected virtual bool IsFileLocked(FileInfo file) 
{ 
    FileStream stream = null; 

    try 
    { 
     stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None); 
    } 
    catch (IOException) 
    { 
     //the file is unavailable because it is: 
     //still being written to 
     //or being processed by another thread 
     //or does not exist (has already been processed) 
     return true; 
    } 
    finally 
    { 
     if (stream != null) 
      stream.Close(); 
    } 

    //file is not locked 
    return false; 
} 
+0

Правильно: есть промежуток времени * между любым возможным тестом и фактической записью в файл, когда какой-либо процесс может начать чтение/запись из/в файл. –

+1

, если вы собираетесь использовать чужой ответ на свою хорошую форму, чтобы включить ссылку на свой пост http://stackoverflow.com/questions/876473/is-there-a-way-to-check-if-a-file- is-in-use – MikeT

+0

@MikeT ответ мой, тот факт, что код, который я предоставил, был использован в других ответах, не имеет значения, поскольку, если вы выполняете поиск в stackoverflow или google, вы обнаружите, что точно такой же код используется в тысячах статей. .. Так кто же владелец? Есть ли ссылка, которую вы предоставили только другому пользователю, который скопировал откуда-то? Бесплодные и бессмысленные дебаты, извините. – sam