2017-02-21 32 views
0

当我写一个文件,并替换包含在文件中的字符串我得到这个错误,我不知道如何解决这个问题:我是否低效使用StreamReader? - “System.IO.IOException”出现在mscorlib.dll

该进程无法访问文件'C:\ WarThunder \ config.blk',因为它正在被另一个进程使用。

我试过关闭所有我已经打开的可以托管这些文件数据的东西,但是我有一种感觉,这可能是我对代码的低效使用造成的。这以前不是问题。我不记得从何时冒出了:/

下面的代码重复每一次对其他两个复选框:

private void rdbDX11_CheckedChanged(object sender, EventArgs e) 
    { 
     if (rdbDX11.Checked == true) 
     { 
      pbOGL3Outer.Visible = false; 
      pdDX11Outer.Visible = true; 
      pdDX9Outer.Visible = false; 
      rdbDX9.Checked = false; 
      rdbOGL3.Checked = false; 
      Properties.Settings.Default.varRenderSelected = ("DirectX11"); 

      using (StreamReader ReadConfig = new StreamReader(Properties.Settings.Default.SavedConfig)) 
      { 
       while (ReadConfig.Peek() != 1)        //While not end of file 
       { 
        var ReWriteFile = File.ReadAllText(Properties.Settings.Default.SavedConfig); 

        if (ReWriteFile.Contains(" driver:t=\"dx9\"")) 
        { ReWriteFile = ReWriteFile.Replace(" driver:t=\"dx9\"", " driver:t=\"dx11\""); } 

        else if (ReWriteFile.Contains(" driver:t=\"gl3\"")) 
        { ReWriteFile = ReWriteFile.Replace(" driver:t=\"gl3\"", " driver:t=\"dx11\""); } 

        else if (ReWriteFile.Contains(" driver:t=\"auto\"")) 
        { ReWriteFile = ReWriteFile.Replace(" driver:t=\"auto\"", " driver:t=\"dx11\""); } 

        System.IO.File.WriteAllText(Properties.Settings.Default.SavedConfig, ReWriteFile); 
       } 
      } 
     } 

    } 
+1

阅读整个文本'var ReWriteFile = File.Re adAllText'编辑它然后写它:'File.WriteAllText(...'。请勿全部使用StreamReader –

+0

谢谢!修复 :) – Lewis

回答

3

所有你需要做的就是

  1. 从文件
  2. 编辑文本
  3. 写回文件

这样的文本阅读:

private void rdbDX11_CheckedChanged(object sender, EventArgs e) 
{ 
    if (rdbDX11.Checked == true) 
    { 
     pbOGL3Outer.Visible = false; 
     pdDX11Outer.Visible = true; 
     pdDX9Outer.Visible = false; 
     rdbDX9.Checked = false; 
     rdbOGL3.Checked = false; 
     Properties.Settings.Default.varRenderSelected = ("DirectX11"); 

     // Read 
     var ReWriteFile = File.ReadAllText(Properties.Settings.Default.SavedConfig); 

     // Edit 
     ReWriteFile = ReWriteFile 
      .Replace(" driver:t=\"dx9\"", " driver:t=\"dx11\"") 
      .Replace(" driver:t=\"gl3\"", " driver:t=\"dx11\"") 
      .Replace(" driver:t=\"auto\"", " driver:t=\"dx11\""); 

     // Write back 
     File.WriteAllText(Properties.Settings.Default.SavedConfig, ReWriteFile); 
    } 
} 
2

这条线:

System.IO.File.WriteAllText(Properties.Settings.Default.SavedConfig, ReWriteFile); 

无法写入到Properties.Settings.Default.SavedConfig,因为你有一个开放的StreamWriter到相同的文件,你打开你的using声明:

using (StreamReader ReadConfig = new StreamReader(Properties.Settings.Default.SavedConfig)) 

没有理由甚至创建此StreamReader或使用while循环。您正在阅读的文件的全文这一行:

var ReWriteFile = File.ReadAllText(Properties.Settings.Default.SavedConfig); 

失去using块;丢失while循环。一切都好。

相关问题