Как закончить процесс?

1

В этой части

if (File.Exists(filePath)) {
      string status = new StreamReader(File.OpenRead(filePath)).ReadLine();

      if (status != "SUCCEEDED") {
           File.Delete(filePath);
           createDb();
      } 
}

программа дает исключение с сообщением

Процесс не может получить доступ к файлу '\ STATUS.txt', потому что он используется другим процессом.

как это исправить?

  • 7
    Вы должны закрыть свой поток.
  • 0
    спасибо, это сделало работу
Теги:
file-io

4 ответа

4

Измените код следующим образом:

if (File.Exists(filePath)) 
{
    string status;
    using(var streamReader = new StreamReader(filePath))
    {
        status = streamReader.ReadLine();
    }

    if (status != "SUCCEEDED")
    {
        File.Delete(filePath);
        createDb();
    }
}
1

Используйте шаблон using:

if (File.Exists(filePath)) {
    using(var stream = new StreamReader(File.OpenRead(filePath)))
    {
      var status = stream.ReadLine();
      if (status != "SUCCEEDED")
      {
        File.Delete(filePath);
        createDb();
      } 
    }
 }

Затем, если somene else использует файл, вы можете открыть поток, как показано ниже:

 new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite))

ant, а затем перейти к конструктору StreamReader.

  • 0
    Вам на самом деле не нужно использовать File.OpenRead . Вы можете использовать этот ctor: msdn.microsoft.com/de-de/library/vstudio/f2ke0fzy
  • 0
    @ thefiloe правильно, просто повторно использовал код OP как есть, но в любом случае полезно для остальной части ответа.
1

вы должны закрыть поток перед удалением файла. Попробуйте это.

if (File.Exists(filePath))
        {
            string status= string.Empty;
            using (var stream = new StreamReader(File.OpenRead(filePath)))
            {
                status = stream.ReadLine();
            }
            if (status != "SUCCEEDED")
            {
                File.Delete(filePath);
                createDb();
            }
        }
0

Перед удалением необходимо закрыть файл или записать его в блок.

if (File.Exists(filePath))
{
    string status= string.Empty;
    using (var stream = new StreamReader(File.OpenRead(filePath)))
    {
        status = stream.ReadLine();
    }
    if (status != "SUCCEEDED")
    {
        File.Delete(filePath);
        createDb();
    }
}
  • 2
    status является строкой. Вы не можете закрыть строку.
  • 0
    @thefiloe: мой плохой. Я так спешил, отвечая. Исправил ответ. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню