C# FileStream是否自动删除临时文件?
我四处搜索了一下,但找不到能很好地解决我问题的东西。 我有一些代码,来自我的数据库的FileStream VARBINAL,并将其转换为客户端计算机上的文件,双击时可在默认应用程序中查看该文件类型,单击下载btn时可下载到客户端PC 问题是,当用户双击Listview中的一个项目(例如mydocument.docx)时,我的代码会给它一个临时名称,并将其存储在客户机上的临时目录中。但是这个文件不会再被删除了?!在这些情况下,如何使刚刚创建的临时文件再次自动删除: 1.用户关闭相关的应用程序(例如Word for.docx),之后将再次删除临时文件。 2.用户关闭Winform窗口,该窗口将删除临时文件。 3.程序创建的所有临时文件将在下次重新启动时删除 我更喜欢案例1,但不确定是否可行 源代码如下所示:C# FileStream是否自动删除临时文件?,c#,winforms,filestream,C#,Winforms,Filestream,我四处搜索了一下,但找不到能很好地解决我问题的东西。 我有一些代码,来自我的数据库的FileStream VARBINAL,并将其转换为客户端计算机上的文件,双击时可在默认应用程序中查看该文件类型,单击下载btn时可下载到客户端PC 问题是,当用户双击Listview中的一个项目(例如mydocument.docx)时,我的代码会给它一个临时名称,并将其存储在客户机上的临时目录中。但是这个文件不会再被删除了?!在这些情况下,如何使刚刚创建的临时文件再次自动删除: 1.用户关闭相关的应用程序(例如
public void WriteFile(string filePath, StoredFile file, bool tempLocation)
{
byte[] data = file.FilContent.ToArray();
FileStream fileStream;
string tempName = Path.GetRandomFileName(), strPath;
if (tempLocation)
strPath = String.Format(@"{0}{1}{2}", Path.GetTempPath(), tempName, file.FilExt);
else
strPath = String.Format(@"{0}{1}", filePath, file.FilExt);
fileStream = new FileStream(strPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None, 512, FileOptions.DeleteOnClose);
try
{
fileStream.Write(data, 0, data.Length);
fileStream.Flush();
if (tempLocation)
System.Diagnostics.Process.Start(@strPath);
}
finally
{
fileStream.Close();
}
}
我试了很多。。。我还尝试使用Process.WaitForExit()方法,但当我使用它时,我的PDF应用程序会显示以下错误消息:
打开此文档时出错。此文件已打开或正在被其他应用程序使用
FileOptions.DeleteOnClose无法正常工作。。。。我希望在流程应用程序关闭时删除临时文件。一个解决方案是使用计时器定期删除预定义位置中的所有文件。嗯,您有两个问题:
public void WriteFile(string filePath, StoredFile file, bool tempLocation)
{
// [snip..]
try
{
fileStream.Write(data, 0, data.Length);
fileStream.Flush();
fileStream.Close();
if (tempLocation)
{
Process p = System.Diagnostics.Process.Start(@strPath);
p.WaitForExit();
File.Delete(strPath);
}
}
finally
{
if (fileStream != null)
fileStream.Dispose();
}
}
我会采取另一种方法:要么
- 让用户决定文件名和位置,您将永远不必删除或删除它
- 使用临时目录中的子文件夹,并在应用程序启动时清空/重新创建它