2013-07-25 1 views
0

Я много искал в googled, но я решил получить какое-либо решение проблемы. Я пытаюсь добавить узел в файл xxx.xml, но его ошибка «процесс не может получить доступ к файлу« xxx.xml », потому что он используется другим процессом», ниже мой класспроцесс не может получить доступ к файлу «xxx.xml», потому что он используется другим процессом.

общественный класс Регистрация { Список пользователей; Список NewUsers; строка Userpath = string.Empty; string NewUserpath = string.Empty; string strUsername = string.Empty;

public bool FINDUSERNAME(string firstname, string lastname, string emailaddress, string country, string purchasedate, string username, string password) 
    { 
     //Put code to get the offers from database to Offers variable 
     if (ReadXML(firstname, lastname, emailaddress, country, purchasedate, username, password)) 
      return true; 
     else 
      return false; 
    } 

    //bool ReadXML(XmlDocument xmlfile2) 
    bool ReadXML(string firstname, string lastname, string emailaddress, string country, string purchasedate, string username, string password) 
    { 
     try 
     { 
      XmlDocument receivedxml = new XmlDocument(); 
      Userpath = HttpContext.Current.Server.MapPath("/SampleData/Registration.xml"); 
      NewUserpath = HttpContext.Current.Server.MapPath("/SampleData/NewRegistration.xml"); 

      XmlReaderSettings xrs = new XmlReaderSettings(); 
      xrs.DtdProcessing = DtdProcessing.Ignore; 
      XmlReader xr = XmlReader.Create(Userpath, xrs); 
      if (xr != null) 
      { 
       //Setting the Root element 
       XmlRootAttribute xRoot = new XmlRootAttribute(); 
       xRoot.ElementName = "Registration"; 
       xRoot.IsNullable = true; 

       XmlSerializer deserializer = new XmlSerializer(typeof(Registration), xRoot); 
       Registration UserDetails = (Registration)deserializer.Deserialize(xr); 
       Users = UserDetails.Users; 

       foreach (var varuser in Users) 
       { 
        if (username == varuser.Username) 
        { 
         strUsername = varuser.Username; 
         return true; 
        } 
       } 
       if (strUsername == "") 
       { 
        //here iam trying to add a node to the xml 
        using (StreamWriter sw = new StreamWriter(File.Create(Userpath))) 
        { 
         sw.Write("<User><Firstname>" 
           + firstname + "</Firstname><Lastname>" 
           + lastname + "</Lastname><Country>" 
           + country + "</Country><Purchasedate>" 
           + purchasedate + "</Purchasedate><Emailaddress>" 
           + emailaddress + "</Emailaddress><Username>" 
           + username + "</Username><Password>" 
           + password + "</Password></User>"); 
        } 
        return false; 
       } 
      } 
      return false; 
     } 
     catch (Exception) 
     { 
      return false; 
     } 
    } 
} 

Спасибо заранее ...

+1

Похоже, что это была повод для использования вашего читателя в использовании –

ответ

0

Похоже, что вы никогда не закрывая читателя, вам нужно вызвать xr.Close() в какой-то момент. Или, как предложил Йохано, завернуть его в использовании заявления:

using (XmlReader xr = XmlReader.Create(Userpath, xrs)) 
    { 
     //Setting the Root element 
     XmlRootAttribute xRoot = new XmlRootAttribute(); 
     xRoot.ElementName = "Registration"; 
     xRoot.IsNullable = true; 

     XmlSerializer deserializer = new XmlSerializer(typeof(Registration), xRoot); 
     Registration UserDetails = (Registration)deserializer.Deserialize(xr); 
     Users = UserDetails.Users; 

     foreach (var varuser in Users) 
     { 
      if (username == varuser.Username) 
      { 
       strUsername = varuser.Username; 
       return true; 
      } 
     } 
     if (strUsername == "") 
     { 
      //here iam trying to add a node to the xml 
      using (StreamWriter sw = new StreamWriter(File.Create(Userpath))) 
      { 
       sw.Write("<User><Firstname>" 
         + firstname + "</Firstname><Lastname>" 
         + lastname + "</Lastname><Country>" 
         + country + "</Country><Purchasedate>" 
         + purchasedate + "</Purchasedate><Emailaddress>" 
         + emailaddress + "</Emailaddress><Username>" 
         + username + "</Username><Password>" 
         + password + "</Password></User>"); 
      } 
      return false; 
     } 
    } 

также другое примечание: Я заметил, что ваш метод называется ReadXml, но вы также писать XML в этом методе. Это может сбивать с толку, вы читаете или пишете? Часть вашей проблемы может также заключаться в том, что вы открываете файл для чтения, а затем создаете файл для записи? Раньше я не рассматривал C# Xml libs, но что-то здесь не кажется правильным. Вы можете подумать об этом.

Смежные вопросы

 Смежные вопросы