Как я могу узнать, почему мой XML-файл уже используется? - PullRequest
0 голосов
/ 16 февраля 2012

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

    XmlDocument doc = new XmlDocument();
    doc.Load("D:\\project\\data.xml");
    if (!Directory.Exists("D:\\project_elysian\\data\\" + System.DateTime.Today.ToString("dd-MM-yyyy")))
    {
        DirectoryInfo di = Directory.CreateDirectory("D:\\project_elysian\\data\\" + System.DateTime.Today.ToString("dd-MM-yyyy"));
    }
    XmlTextWriter writer = new XmlTextWriter("D:\\project_elysian\\data\\" + System.DateTime.Today.ToString("dd-MM-yyyy") + "\\" + System.DateTime.Now.ToString("HH-mm-ss") + ".xml", null);
    XmlTextWriter writerlatest = new XmlTextWriter("D:\\project\\data\\latest\\today.xml", null);
    writer.Formatting = Formatting.Indented;
    writerlatest.Formatting = Formatting.Indented;
    doc.Save(writer);
    doc.Save(writerlatest);
    doc = null;
    writer.Flush();
    writerlatest.Flush();

он записывает XML-файл по своему желанию, но после этого, когда я пытаюсь прочитать этот XML-файл на той же странице asp.net (код, размещенный в файле кода C # позади), используя следующий код, он выдает ошибку

    string filename = "D:\\project\\data\\latest\\today.xml";

    XmlSerializer serializer = new XmlSerializer(typeof(searchResult));
    serializer.UnknownNode += new XmlNodeEventHandler(serializer_UnknownNode);
    serializer.UnknownAttribute += new XmlAttributeEventHandler(serializer_UnknownAttribute);
    FileStream fs = new FileStream(filename, FileMode.Open);

ошибка следующая

The process cannot access the file 'D:\project\data\latest\today.xml' because it is being used by another process.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.IO.IOException: The process cannot access the file 'D:\project\data\latest\today.xml' because it is being used by another process.

РЕДАКТИРОВАТЬ: файл не используется ни одним другим процессом

Ответы [ 3 ]

3 голосов
/ 16 февраля 2012

Убедитесь, что вы закрываете писателя вызовом, подобным writer.Close();

2 голосов
/ 16 февраля 2012

Файл используется вами самостоятельно. Вы должны закрыть или удалить объект XmlTextWriter после их использования.

public class XmlTextWriter : XmlWriter
{..}
public abstract class XmlWriter : IDisposable
{..}

Реализация IDisposable сообщает пользователю. Я использую какой-то неуправляемый ресурс, пожалуйста, позвоните в Dispose, чтобы освободить их. см. msdn: IDisposable Interface

Используется ярлык, обеспечивающий удобный синтаксис, обеспечивающий правильное использование IDisposable объектов. например:

using (System.IO.FileStream fs =
    new System.IO.FileStream("c:\\file.txt",
        System.IO.FileMode.Open),
        fs2 =
    new System.IO.FileStream("c:\\file2.txt",
        System.IO.FileMode.CreateNew))
{
    // do something here
}

Код выше: ОТМЕНА С ИСПОЛЬЗОВАНИЕМ

0 голосов
/ 16 февраля 2012

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

...