Мгновенное создания файла csv

124
18 января 2019, 04:00

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

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)

Вопрос: как можно при создании записать туда текст?

Answer 1

Немного поправил ваш код. Делает абсолютно то же самое, но чуть более ёмко.

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, которая создаст файл автоматически, при его отсутствии. Подробнее в доках.

READ ALSO
Как сохранить текстовый файл в нужной кодировке?

Как сохранить текстовый файл в нужной кодировке?

Как известно строки в С# все в UnicodeКак сохранить текстовый файл в нужной кодировке ?

145
Управление компьютером через командную строку C#

Управление компьютером через командную строку C#

Возникла идея сделать управление компьютером через телефонУправлять планирую с помощью командной строки, то есть на телефоне сделать импровизированый...

119
Проблемы с Rigidbody, Unity

Проблемы с Rigidbody, Unity

Rigidbody ведёт себя неадекватно при трении об коллайдерНесколько секунд двигаемся, прикасаясь к коллайдеру, потом то, что мы двигаем, дёргает...

139
Как подключить MS SQL к Unity

Как подключить MS SQL к Unity

При создании скрипта в Юнити, а потом загрузке в VS Когда пытаюсь подключить библиотеки SystemData

170