Я пытаюсь обнаружить, если файл существует во времени выполнения, в противном случае создайте его. Однако я получаю эту ошибку, когда я пытаюсь записать в нее:
Процесс не может получить доступ к файлу '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
}
Какие-либо идеи о том, как зафиксировать его?
Метод File.Create
создает файл и открывает для него FileStream
. Итак, ваш файл уже открыт. Вам вообще не нужен метод file.Create:
string filePath = @"c:\somefilename.txt";
using (StreamWriter sw = new StreamWriter(filePath, true))
{
//write to the file
}
Логическое значение в конструкторе StreamWriter
приведет к добавлению содержимого, если файл существует.
При создании текстового файла можно использовать следующий код:
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
}
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 для автоматического закрытия файла.
Я обновил ваш вопрос фрагментом кода. После правильного отступа сразу становится ясно, в чем проблема: вы используете 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
конструктор.