2015-11-04 220 views
-1

有人能告訴我爲什麼我在下面的代碼中有這個錯誤嗎? beucase它使用由另一個procces無法打開文件c#

的procces無法訪問文件「...」。

我關閉了第一個StreamReader後,當我初始化StreamWriter時,它墜毀了。

private static void removeSetting(string _class) 
{ 
    try 
    { 
     string[] allSettings = new string[20]; 
     int iSettings = 0; 

     using (StreamReader FILE_READER = new StreamReader("DATA.properties")) 
     { 
      string line = FILE_READER.ReadLine(); 

      while (line != null) 
      { 
       if (!line.Equals("")) 
       { 
        allSettings[iSettings] = line; 
        iSettings++; 
       } 
       line = FILE_READER.ReadLine(); 
      } 
     } 

     using (StreamWriter FILE_WRITER = new StreamWriter("DATA.properties", false)) 
     { 
      for (int i = 0; i <= iSettings; i++) 
      { 
       if (!allSettings[i].Split('=')[0].Equals(_class)) 
       { 
        FILE_WRITER.WriteLine('\n' + allSettings[i] + '\n'); 
        //i--; 
       } 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
    } 
} 

public static void saveSetting(string _class, string value) 
{ 
    removeSetting(_class); 

    try 
    { 
     StreamWriter FILE_WRITER = new StreamWriter("DATA.properties", true); 

     FILE_WRITER.WriteLine(_class.ToString() +'='+ value); 
     FILE_WRITER.Close(); 
    } 
    catch (Exception ex) 
    { 
    } 
} 
+0

你確定你沒有用不同的過程,有一個寫鎖打開的文件?也許是文本編輯器? –

+1

還要確保您有權限訪問該文件。 –

+0

我沒有打開任何文本編輯器。 –

回答

-1

解決方案:您需要找到一個程序來打開此文件並殺死它或重新加載操作系統。

我建議你要改變 「_class =屬性oldValue」 的 「_class = NEWVALUE」 使用_class這樣

oldText:

狗=鎖

貓=鮑勃

使用saveSetting(dog,fork)

newText:

貓=鮑勃

狗=叉

您可以使用此方法

private static void removeSetting(string _class,string value) 
     { 
      try 
      { 
       //read all lines from file 
       string[] allSettings = File.ReadAllLines("DATA.properties"); 

       //divide string on string[] by '=' 
       List<List<string>> strings = allSettings.Select(x => x.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries).ToList()).ToList(); 

       //find all lines where first element equals _class 
       List<List<string>> result = strings.Where(x => x.First().Equals(_class)).Select(x=>new List<string>{_class, value}).ToList(); 

       // convert string[] => string 
       string[] secondResult = result.Select(x => String.Join("=",x.ToArray())).ToArray(); 

       List<List<string>> otherResult = strings.Where(x => !x.First().Equals(_class)).Select(x => x).ToList(); 

       string[] firstResult = otherResult.Select(x => String.Join("=", x.ToArray())).ToArray(); 

       //wrtie all lines in file 
       File.WriteAllLines("DATA.properties",firstResult); 

       File.AppendAllLines("DATA.properties", secondResult); 
      } 
      catch (Exception ex) 
      { 

      } 
     } 
+0

我的屬性文件在一行上有一個未知數的'='(大於或等於一)例如:user = Xg245 = asFS5 = 43(我將之前的文本隱藏在文件中)。 –