2

当我第一次打开文件、读取其内容并保存时,该应用程序运行良好。但是当我再次打开同一个文件时,我得到一个file-not-found exception。如何刷新流?

FileStream usrFs = null;
try
{
    usrFs = new FileStream(xmlSource, FileMode.Open, FileAccess.Read,
    FileShare.ReadWrite);
}
catch (IOException)
{
    MessageBox.Show("File not found in the specified path");
}

XML

<?xml version="1.0"?>
<MenuItem BasePath="c:\SampleApplication">

堆栈跟踪

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)    
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)    
at SampleApplication.MainForm.ProcessDocument(BackgroundWorker worker, DoWorkEventArgs e) in C:\Users\273714\Desktop\CRAFTLite - VSTS\SampleApplication\MainForm.cs:line 179
4

3 回答 3

4

你可以试试这个:

    using (FileStream usrFs = new FileStream(xmlSource, FileMode.Open, 
      FileAccess.Read, FileShare.ReadWrite) 
     {
       ... 
     }
于 2013-04-25T07:58:08.737 回答
0

读取文件后,当您完成读取或写入后closefilestream...

finally
{
   fileStream.Close();
}

并且 IOEXCEPTIONS将是不同的类型,您只是显示找不到文件的消息。在您的情况下,异常不会是找不到文件...它将是file already open by another process.

于 2013-04-25T07:55:24.823 回答
0

你得到一个IOException可能是由许多问题引起的。如果要检查未找到的文件,则应检查System.IO.FileNotFoundException. 如果没有任何其他信息,很难准确判断是什么导致了问题。

一个问题是当前您没有关闭文件流。您需要调用usrFs.Close()finally 方法。或者更好的是,使用using关键字来确保文件已关闭。

using( var usrFs = new FileStream(xmlSource, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) )
{
    // do things here
}
// usrFs is closed here, regardless of any exceptions.
于 2013-04-25T08:14:33.977 回答