XmlDocument Salvar mantém o arquivo aberto

9

Eu tenho uma função c # simples que cria um arquivo XML básico e salva:

private void CreateXMlFile(string Filename, string Name, string Company)
        {
            XmlDocument doc = new XmlDocument();
            XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
            doc.AppendChild(docNode);

            XmlNode licenseNode = doc.CreateElement("license");
            doc.AppendChild(licenseNode);

            XmlNode node = doc.CreateElement("Name");
            node.AppendChild(doc.CreateTextNode(Name));
            licenseNode.AppendChild(node);

            node = doc.CreateElement("Company");
            node.AppendChild(doc.CreateTextNode(Company));
            licenseNode.AppendChild(node);


            doc.Save(Filename);
        }

Quando tento editar ou excluir o arquivo, sempre recebo o seguinte erro:

  

O processo não pode acessar o arquivo porque está sendo usado por outro   processo.

O XmlDocument não possui rotinas de eliminação ou fechamento inerentes e se perguntou como posso forçar o fechamento do arquivo antes de editá-lo ou excluí-lo posteriormente.

Eu tentei salvar o arquivo usando o StreamWriter:

StreamWriter outStream = System.IO.File.CreateText(outfile);
            outStream.Write(data);
            outStream.Close();

Mas isso não fez diferença com o mesmo erro.

Seu conselho é muito aceito.

Obrigado

    
por Belliez 17.02.2012 в 11:30
fonte

2 respostas

4

Envie o fluxo para o método Save do XmlDocument em vez do nome do arquivo.

    private static void Main(string[] args)
    {
        CreateXMlFile("c:\test.xml", "testName", "testCompany");
    }

    private static void CreateXMlFile(string Filename, string Name, string Company)
    {
        XmlDocument doc = new XmlDocument();
        XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
        doc.AppendChild(docNode);

        XmlNode licenseNode = doc.CreateElement("license");
        doc.AppendChild(licenseNode);

        XmlNode node = doc.CreateElement("Name");
        node.AppendChild(doc.CreateTextNode(Name));
        licenseNode.AppendChild(node);

        node = doc.CreateElement("Company");
        node.AppendChild(doc.CreateTextNode(Company));
        licenseNode.AppendChild(node);
        StreamWriter outStream = System.IO.File.CreateText(Filename);

        doc.Save(outStream);
        outStream.Close();
    }

Eu tentei executar o código acima e ele está funcionando bem no final.

    
por AshokD 17.02.2012 / 12:20
fonte
1

Seu código está bem. Eu testei na minha máquina e não há mais nenhum bloqueio após salvar ().

Tente usar o Unlocker (http://www.softpedia.com/get/System/System-Miscellaneous/Unlocker.shtml) para verificar se você é realmente quem detém o bloqueio.

Qual framework do .NET você usa? Há também um relatório (http://bytes.com/topic/net/answers/467028-xmldocument-save-does-not-close-file-properly) que também não foi reproduzível.

    
por BlueM 17.02.2012 / 12:17
fonte