none
como fechar conexão xml RRS feed

  • Pergunta

  • estou abrindo a "conexão" xml desta forma no meu programa windows form

    porem eu preciso executar este codigo mais de uma vez, quando é executado pela primeira vez funciona mas quando preciso executar novamente fala que ja esta sendo utilizado por outro programa,sendo assim preciso de algo tipo

     

    doc.close();

    algo do tipo alguem sabe se tem como fazer isso?

     

    XmlDocument doc = new XmlDocument();

    doc.Load("password1.xml");

    quinta-feira, 25 de setembro de 2008 11:37

Respostas

  • Olá Filipi,

     

    Existe um overload do construtor da classe XmlDocument que aceita um Stream. Se você está abrindo o arquivo antes, em um Stream, você pode utilizá-lo para ler o XML, utilizando o Stream que você já tem...

     

    Não consigo te ajudar mais do que isso, se você não disser o que pretende fazer e mostrar o código que está utilizando para abrir o arquivo e em abrir de novo para ler o XML...

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quinta-feira, 25 de setembro de 2008 14:38

Todas as Respostas

  • Olá Filipi,

     

    Não há motivo para o XmlDocument estar travando o seu arquivo, porque quando você executa o método Load, ele carrega tudo para a memória e já fecha o arquivo... Depois de fazer um Load, você pode até apagar o arquivo do disco e continuar trabalhando com o XmlDocument ao mesmo tempo...

     

    Se quiser, faça um teste. Crie um novo projeto vazio e abra o arquivo várias vezes, só para confirmar o que acabei de escrever acima:

     

    Code Snippet

     

     XmlDocument doc;

     

     for (int i = 0; i < 1000; i++)

     {

    doc = new XmlDocument();

    doc.Load(@"password1.xml");

     }

     

     MessageBox.Show("Terminou...");

     

     

    Assim, vejo duas possibilidades:

     

    1-) Você está abrindo esse arquivo password1.xml em algum outro lugar (em um StreamReader, por exemplo), e está deixando aberto...

     

    2-) Você está tentando abrir esse arquivo em múltiplas threads, e está tendo algum conflito por falta de sincronismo...

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quinta-feira, 25 de setembro de 2008 13:25
  • realmente estou tentando abrir este arquivo password1.xml de outro local!!!!!!

     

    não sei como faço para utilizar o arquivo ja existente na memoria!!!!!

     

    quinta-feira, 25 de setembro de 2008 14:05
  • Olá Filipi,

     

    Existe um overload do construtor da classe XmlDocument que aceita um Stream. Se você está abrindo o arquivo antes, em um Stream, você pode utilizá-lo para ler o XML, utilizando o Stream que você já tem...

     

    Não consigo te ajudar mais do que isso, se você não disser o que pretende fazer e mostrar o código que está utilizando para abrir o arquivo e em abrir de novo para ler o XML...

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quinta-feira, 25 de setembro de 2008 14:38
  • estou criando uma aplicação windows form que funciona da seguinte forma,

    vou falar apartir do problema pra simplificar

     

    tenho um arquivo xml "preenchido"

     

    preencho um combobox com todas as 1º linha de cada nó como mostro no codigo abaixo

    for (int j = 0; j < Elem.ChildNodes.Count; j++)

    {

    comboBox1.Items.AddRange(new object[] {

    Elem.ChildNodes.Item(j).ChildNodes.Item(0).InnerText});

    }

     

    isso funciona correto so que na minha aplicação tem 2 abas, uma que contem o combo e outra aba para inserir os nos no xml porem quando eu insiro outro no no xml estou tendo dificuldade para fazer com que isso atualize no combo no caso eu tenho que fechar o programa e abrir ai ja vem atualizado,

    tenho um metodo que se chama populacombo() como mostro abaixo

    public void populacombo()

    {

    if(File.Exists("password1.xml"))

    {

    XmlDocument doc = new XmlDocument();

    string path = "password1.xml";

    FileStream fx = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);

    doc.Load(fx);

    XmlNode Nop = doc.DocumentElement.FirstChild;

    XmlElement Elem = doc.DocumentElement;

    for (int j = 0; j < Elem.ChildNodes.Count; j++)

    {

    comboBox1.Items.AddRange(new object[] {

    Elem.ChildNodes.Item(j).ChildNodes.Item(0).InnerText});

    }

    fx.Close();

    }

    else

    {

    limpacombo();

    }

    }

     

    o problema é que eu to colocando esse metodo no botão de inserir e ta dando erro falando que o arquivo password.xml esta sendo utilizado por outro processo. esse mesmo metodo é chamado quando eu carrego o programa

    public Form1()

    {

    InitializeComponent();

    populacombo();

    }

     

    quinta-feira, 25 de setembro de 2008 19:54
  • descobri o problema apesar da menssagem de que o arquivo estava sendo utilizado por outro processo

    não tinha nada ha ver com conexão xml etc era simplesmente o filestream que estava

    FileStream fx = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);

    ao inves de

    FileStream fx = new FileStream(path, FileMode.Open, FileAccess.write, FileShare.write);

     

    problema mudar o fileaccess e o fileshare de read para write.

    sexta-feira, 26 de setembro de 2008 12:28