2016-08-18 6 views
1

Я знаю, что этот тип вопросов задавали раньше, и я знаю, когда это исключение выбрано. Однако я не могу разрешить это в своем коде.IOException: файл используется другим процессом

У меня есть DataSet, и я пытаюсь записать его схему и данные в файл xml.

Вот мой код:

//Handler to Application.Startup Event of current Application 
private void App_Startup(object sender, StartupEventArgs e) 
{ 
    DataFile = new FileInfo("Data.xml"); //DataFile is a `System.IO.FileInfo` 
    Data = new DataSet("Data"); //Data is a `System.Data.DataSet` 

    if (!DataFile.Exists) 
    { 
     DataFile.Create(); 

     // Some code here that initializes `Data` (not referencing DataFile here, 
     // nor doing any IO operation) 

     Data.WriteXml(DataFile.FullName, XmlWriteMode.WriteSchema); //Exception is caught here 
    } 
} 

Перед тем, как запустить программу, я удалить файл "data.xml".

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

Что не так в моем коде?

+0

Что вы ожидаете от своего кода? В вашем тексте говорится, что вы хотите писать, ваш метод называется read и ваш файл пуст. – nvoigt

+0

@nvoigt извините, мой плохой. Сделал ошибку, задав вопрос. Pl. проверьте редактирование. –

ответ

8

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

Кроме того, я бы не ожидал, что вам нужно будет создать файл в любом случае - я бы ожидал, что WriteXml сделает это, поэтому вы должны просто полностью удалить заявление DataFile.Create();.

+0

извините, мой плохой. Сделал ошибку, задав вопрос. Pl. проверьте редактирование. –

+0

@VijayChavda: Хорошо, я удалил средний абзац - остальная часть ответа все еще стоит. –