2015-04-17 121 views
0

我在程序中分散了以下代码。不过,我总是看到下面的错误。即使我使用“使用括号”来处理资源,我仍然不知道为什么会发生这种情况。如何“无法访问”文件,以便程序的其他部分可以访问它

错误:

The Process cannot access the file "the file path" because it is being used by another process.

代码:

string folderpath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "AGoogleHistory"); 
string filecreate; 


private void restoreTbasToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    using(StreamReader sr = new StreamReader(filecreate)) 
    { 
     string s = sr.ReadToEnd(); 
     MessageBox.Show(s, "History", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    } 
} 

try 
{ 
    browser.Navigate(new Uri(Address)); 
    using(StreamWriter sw = new StreamWriter(filecreate)) 
    { 
     sw.WriteLine(Address); 
    } 
} 
catch(System.UriFormatException) 
{ 
    return; 
} 


private void clearToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    if (MessageBox.Show("Are You Sure", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) 
    { 
     File.Delete(filecreate); 
    } 
    else 
    { 

    } 
} 
+1

您的图片一个到imgur主页的链接。我删除它。请不要发布错误图片,只是文字,请。 – Blorgbeard

回答

0

我觉得你应该先检查该文件是否存在或不

File.Exists(filePath); 

第二件事要传递错误的参数StreamReader这是一个空字符串,因为您尚未分配任何内容。首先检查上面提到的东西,你可以参考下面的链接,您放心:

The process cannot access file...

让我知道如果你尝试此方法后有任何其他问题。

0

StreamReader默认情况下锁定文件。这会导致您看到的错误。幸运的是,StreamReader接受一个流作为其构造函数的重载之一。这允许您首先创建一个FileStream,该FileStream有一个方便的枚举,允许您指定读/写共享,然后将该FileStream传递给您的StreamReader以供使用。

所以你的情况:

using(StreamReader sr = new StreamReader(filecreate)) 
... 

变为:

FileStream fs = new FileStream(filecreate, FileMode.Open, FileShare.ReadWrite); 
using(StreamReader sr = new StreamReader(fs)) 
... 

欲了解更多信息,请参见下面的问题。这本质上是同一个问题,只是有所不同。接受的答案应该多解释一下。

How to open a StreamReader in ShareDenyWrite mode?

编辑

纵观你的问题,我再次看到你的问题的一部分是,你不要关闭您的视频流。他们应该得到封闭using块退出时,但它是最好的做法给自己关闭它们与sr.Close();

此外,您可能需要删除标志添加到文件共享选项:

FileStream fs = new FileStream(filecreate, FileMode.Open, FileShare.ReadWrite|FileShare.Delete); 
using(StreamReader sr = new StreamReader(fs)) 
... 
相关问题