Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文件可以´;因为其他进程使用该文件,所以无法重写_C#_Filestream_File Access - Fatal编程技术网

C# 文件可以´;因为其他进程使用该文件,所以无法重写

C# 文件可以´;因为其他进程使用该文件,所以无法重写,c#,filestream,file-access,C#,Filestream,File Access,我已经编写了一些代码,用C#作为.eml文件的附件发送文件。 我在Windows临时文件夹中创建文件,并将其附加到.eml文件。 .eml文件只需打开并通过Process.Start(文件名)发送即可代码。如果用户希望再次发送该文件,将从数据库中重写该文件,以确保其为最新版本。现在我的问题是:随机几次,或者在我第一次重写该文件后,会出现错误 该进程无法访问该文件,因为另一进程正在使用该文件 我确实在网络上做了一些研究,发现了另一个。所以我确保像上面提到的那样,文件流的所有参数都设置正确。var

我已经编写了一些代码,用C#作为.eml文件的附件发送文件。
我在Windows临时文件夹中创建文件,并将其附加到.eml文件。 .eml文件只需打开并通过
Process.Start(文件名)发送即可代码。如果用户希望再次发送该文件,将从数据库中重写该文件,以确保其为最新版本。

现在我的问题是:随机几次,或者在我第一次重写该文件后,会出现错误

该进程无法访问该文件,因为另一进程正在使用该文件

我确实在网络上做了一些研究,发现了另一个。
所以我确保像上面提到的那样,文件流的所有参数都设置正确。
var fs=new FileStream(tempathsave,FileMode.Open,FileAccess.Write,FileShare.ReadWrite)

有人知道我出现问题的原因吗?我最大的问题是,当我做这个或那个时,我不能真的复制它来说它正在发生


编辑:我在using语句中使用FileStream,以确保正确处理该文件。

如果不实际查看代码,很难正确理解问题所在,但根据我的经验,您没有正确处理FileStream对象,因此它保留了文件句柄

var fs = new FileStream(tempPathSave, FileMode.Open, FileAccess.Write, FileShare.ReadWrite)
因此,当您使用完文件流后,请调用

fs.Dispose();
这将正确处理您的文件流

此外,您可以使用合成糖,
使用
,它将自动处理您的对象

using(var fs = new FileStream(tempPathSave, FileMode.Open, FileAccess.Write, FileShare.ReadWrite)){
// use fs here
// STUFF
} //at the end fs will be disposed

我已经找到了解决问题的办法。我刚刚将FileStream更改为MemoryStream,因为MailMessage构造函数也可以处理流。唯一的一点是,在保存.eml文件之前,必须保持MemoryStream打开。更重要的是,您必须注意内存的使用情况,并确保以后每个MemoryStream都会被处理。

在您所指的问题中,FileStream位于“using”块内,因此可以正确处理。是否电子邮件程序仍然可以访问该文件?我在using语句中保存了所有内容,以确保FileStream已关闭。我总是检查任务管理器邮件程序是否关闭。但我也可以让邮件程序打开几次,直到出现异常。有时它会在第一次之后直接出现。所以…我不知道。好吧,一个解决办法是只使用另一个文件名。。。FS有时可能是一个b1tch。我同意@Fildor的概念。我会在临时文件夹中创建一个专用目录,并使用唯一的文件名(guid)。我会定期进行清理-删除超过2小时的文件。虽然您的建议是一个很好的实践,但在这种情况下,也可能是邮件程序没有干净地释放文件句柄。windows fs可能对所有这些都很苛刻。实际上,我是在使用文件流的情况下使用的…所以…处理fs不应该是问题所在。