.NET: IOException для разрешений при создании нового файла? - PullRequest
0 голосов
/ 25 марта 2010

Я пытаюсь создать новый файл и записать в него XML:

FileStream output = File.Create(Path.Combine(PATH_TO_DATA_DIR, fileName));

Аргумент оценивается как:

C:\path\to\Data\test.xml

Исключение составляет:

The process cannot access the file 'C:\path\to\Data\test.xml' because it is being used by another process.

Что я здесь не так делаю?

ОБНОВЛЕНИЕ: Этот код вызывает то же исключение:

StreamWriter writer = new StreamWriter(Path.Combine(PATH_TO_DATA_DIR, fileName));

ОБНОВЛЕНИЕ 2: Файл, который я пытаюсь создать, не существует в файловой системе. Так как же это можно использовать?

ОБНОВЛЕНИЕ 3: Изменено имя нового файла, и теперь оно работает. Я не уверен почему. Возможно, я по незнанию создал его при первом вызове, и он не удался при последующих вызовах?

Ответы [ 3 ]

0 голосов
/ 25 марта 2010

Сообщение означает, что другой процесс использует этот файл. Если он у вас открыт, он может использовать его или когда он был изначально создан, если поток не был закрыт должным образом, что также может сделать это.

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

0 голосов
/ 25 марта 2010

Не пытается звучать оскорбительно, но папка существует? Файл уже существует, но скрыт системой? И имеет ли учетная запись пользователя, на котором запущена программа, разрешения на запись в папку? Вы пытались создать файл, используя другой метод (например, с File.WriteAllText(<path>, "Testing"), просто чтобы посмотреть, является ли это ваш конкретный вызов File.Create?

0 голосов
/ 25 марта 2010

Ваша программа сохраняет дескриптор вашего файла после его создания, чтобы вернуться к вашему объекту FileStream. Поскольку вы не указываете доступ к нему, возможно, он не позволит вам получить доступ к нему. Возможно, стоит подумать о том, чтобы закрыть его, а затем снова открыть его надлежащим образом, указав способ его открытия (ReadOnly, ReadWrite, WriteOnly)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...