Мне нужно проверить есть ли файл по пути, если нет то создать его и сразу же добавить туда текст, но вот проблема, файл создается но текст не добавляется и только при следующим запуске добавляется текст который должен был бы быть если бы файл существовал.
if (File.Exists (Application.dataPath + "/Resources/" + FileName + ".csv")) {
File.WriteAllText(Application.dataPath + "/Resources/" + FileName + ".csv", Resources.Load<TextAsset>(FileName).text + "000\n");
} else
{
File.Create(Application.dataPath + "/Resources/" + FileName + ".csv");
File.WriteAllText(Application.dataPath + "/Resources/" + FileName + ".csv", "111\n");
}
Но на выходе при записи после создании выдает ошибку
IOException: Sharing violation on path C:\Users\Rostik\Documents\untitled47\Shashki2d\Assets\Resources\Ro1.csv System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.IO/FileStream.cs:320) System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share) (wrapper remoting-invoke-with-check) System.IO.FileStream:.ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare) System.IO.StreamWriter..ctor (System.String path, Boolean append, System.Text.Encoding encoding, Int32 bufferSize) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.IO/StreamWriter.cs:124) System.IO.StreamWriter..ctor (System.String path, Boolean append, System.Text.Encoding encoding) (wrapper remoting-invoke-with-check) System.IO.StreamWriter:.ctor (string,bool,System.Text.Encoding) System.IO.File.WriteAllText (System.String path, System.String contents, System.Text.Encoding encoding) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.IO/File.cs:626) System.IO.File.WriteAllText (System.String path, System.String contents) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.IO/File.cs:621) CSVRo.Awake () (at Assets/Resources/CSVRo.cs:17)
Вопрос: как можно при создании записать туда текст?
Немного поправил ваш код. Делает абсолютно то же самое, но чуть более ёмко.
var path = "В:\\myFile.txt"; // расширение не важно
if (!File.Exists(path))
{
File.Create(path);
}
File.WriteAllText(path, "blablabla");
Обращение к файлу таким образом работает корректно, хотя и оставляет поток открытым, после вызова File.Create()
Даже при открытом в Notepad'e файле (предположения других пользователей в комментах вопроса), исключений не возникает, пускай в него ничего и не пишется.
Вероятнее всего, где-то еще вызываются потоки, которые пытаются стучаться в файл или поток созданного файла блокирует доступ.
Возможно, поможет изменение строки:
File.Create(path).Dispose();
// А дальше код записи в файл.
upd. Решил поправить ответ, т.к. господа в комментариях к моему ответу дали очень полезные советы.
Можно обойтись без проверки/создания файла(которые создают FileStream
и который в вашем коде не был утилизирован) и писать все сразу функцией File.WriteAllLines
, которая создаст файл автоматически, при его отсутствии. Подробнее в доках.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как известно строки в С# все в UnicodeКак сохранить текстовый файл в нужной кодировке ?
Возникла идея сделать управление компьютером через телефонУправлять планирую с помощью командной строки, то есть на телефоне сделать импровизированый...
Rigidbody ведёт себя неадекватно при трении об коллайдерНесколько секунд двигаемся, прикасаясь к коллайдеру, потом то, что мы двигаем, дёргает...
При создании скрипта в Юнити, а потом загрузке в VS Когда пытаюсь подключить библиотеки SystemData