Я пытаюсь определить, существует ли файл во время выполнения, если нет, создайте его. Однако я получаю эту ошибку, когда пытаюсь написать на нее:
Процесс не может получить доступ к файлу 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(string, FileMode)
конструктор и передать ему FileMode.Create , который перезапишет любой существующий файл. По-прежнему нет необходимости открывать файл дважды. Кроме того, этот ответ был отредактирован после того, как я опубликовал свой исходный комментарий..Close()
в конце, чтобы он работал в любом случае. Я не доверяю системе использованияFileStream
для всего, потому что я не хочу, чтобы исключение произошло вFileMode.Create
том случае, если файл уже существует, особенно когда я хочу очистить содержимое, а не добавлять к немуFileMode.Open
. Для меня этоFileStream
действительно работает только после того, как я избавился от рассматриваемого файла, а затем записал в него. ПосколькуFile.Create
он оставляет его открытым и заблокированным, кажется, что добавление.Close()
к нему - единственный реальный способ справиться с моим сценарием и SO.При создании текстового файла вы можете использовать следующий код:
Используя код из вашего комментария. Созданный вами файл (поток) необходимо закрыть. File.Create возвращает файловый поток в только что созданный файл .:
источник
File.Create
возвращается,FileStream
и у него естьClose()
источник
File.Create возвращает FileStream. Вам нужно закрыть это, когда вы написали в файл:
Вы можете использовать using для автоматического закрытия файла.
источник
StreamWriter
чем можно судить по его использованиюFile.AppendText
.Я обновил ваш вопрос с помощью фрагмента кода. После правильного отступа сразу становится понятно, в чем проблема: вы используете,
File.Create()
но не закрываете то,FileStream
что он возвращает.В этом нет необходимости, он
StreamWriter
уже позволяет добавить к существующему файлу и создать новый файл, если он еще не существует. Как это:Которая использует этот
StreamWriter
конструктор .источник
На этот вопрос уже был дан ответ, но вот реальное решение, которое проверяет, существует ли каталог, и добавляет номер в конец, если текстовый файл существует. Я использую это для создания файлов ежедневного журнала в службе Windows, которую я написал. Я надеюсь, что это поможет кому-то.
источник
Я знаю, что это старый вопрос, но я просто хочу выбросить его, чтобы вы все еще могли его использовать
File.Create("filename")"
, просто добавьте.Dispose()
к нему.File.Create("filename").Dispose();
Таким образом, он создает и закрывает файл, чтобы следующий процесс мог его использовать.
источник
File.Create(FilePath).Close();
из приведенного выше ответа имеетthis.Dispose(true); GC.SuppressFinalize((object) this);
в своей реализации.Думаю, я знаю причину этого исключения. Вы можете запускать этот фрагмент кода в нескольких потоках.
источник
Попробуйте это: он работает в любом случае, если файл не существует, он создаст его, а затем запишет в него. И если он уже существует, без проблем он откроется и напишет ему:
источник