Файл, используемый другим процессом после использования Файла. Создайте ()

Я пытаюсь обнаружить, если файл существует во времени выполнения, в противном случае создайте его. Однако я получаю эту ошибку, когда я пытаюсь записать в нее:

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

string filePath = string.Format(@"{0}\M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre); 
if (!File.Exists(filePath)) 
{ 
    File.Create(filePath); 
} 

using (StreamWriter sw = File.AppendText(filePath)) 
{ 
    //write my text 
}

Какие-либо идеи о том, как зафиксировать его?

110
задан bluish 17 June 2014 в 07:19
поделиться

4 ответа

Метод File.Create создает файл и открывает для него FileStream . Итак, ваш файл уже открыт. Вам вообще не нужен метод file.Create:

string filePath = @"c:\somefilename.txt";
using (StreamWriter sw = new StreamWriter(filePath, true))
{
    //write to the file
}

Логическое значение в конструкторе StreamWriter приведет к добавлению содержимого, если файл существует.

108
ответ дан 24 November 2019 в 03:11
поделиться

При создании текстового файла можно использовать следующий код:

System.IO.File.WriteAllText("c:\test.txt", "all of your content here");

Используя код из вашего комментария. Созданный вами файл(поток) должен быть закрыт. File.Create возвращает поток в только что созданный файл.:

string filePath = "filepath here";
if (!System.IO.File.Exists(filePath))
{
    System.IO.FileStream f = System.IO.File.Create(filePath);
    f.Close();
}
using (System.IO.StreamWriter sw = System.IO.File.AppendText(filePath))
{ 
    //write my text 
}
25
ответ дан 24 November 2019 в 03:11
поделиться

File.Create возвращает FileStream. Вам нужно закрыть это, когда вы записали в файл:

using (FileStream fs = File.Create(path, 1024)) 
        {
            Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
            // Add some information to the file.
            fs.Write(info, 0, info.Length);
        }

Вы можете использовать using для автоматического закрытия файла.

9
ответ дан 24 November 2019 в 03:11
поделиться

Я обновил ваш вопрос фрагментом кода. После правильного отступа сразу становится ясно, в чем проблема: вы используете File.Create(), но не закрываете FileStream, который он возвращает.

Делать это таким образом нет необходимости, StreamWriter уже позволяет добавлять к существующему файлу и создавать новый файл, если он еще не существует. Например, так:

  string filePath = string.Format(@"{0}\M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre); 
  using (StreamWriter sw = new StreamWriter(filePath, true)) {
    //write my text 
  }

Который использует этот StreamWriter конструктор.

8
ответ дан 24 November 2019 в 03:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: