gpt4 book ai didi

c# - FileStream 自动删除临时文件?

转载 作者:行者123 更新时间:2023-11-30 15:08:51 25 4
gpt4 key购买 nike

我四处搜索了一下,但找不到能完美解决我的问题的东西。我有一些代码,即来 self 的数据库的 FileStream varbinary,并将其制作成客户端计算机上的文件,双击时可以在文件类型的默认应用程序中查看,并在单击下载 btn 时下载到客户端 PC。

问题是,当用户双击 ListView 中的一个项目(例如 mydocument.docx)时,我的代码会给它一个临时名称,并将其存储在客户端计算机上的临时目录中。但是这个文件不会再被删除了?!在这些情况下,如何让我刚刚创建的临时文件再次自动删除:1. 用户关闭关联的应用程序(例如 .docx 的 Word),之后将再次删除临时文件。2. 用户关闭 Winform 窗口,这将删除临时文件。3. 程序创建的所有临时文件将在下次重启时删除。

我更喜欢第一种情况,但不确定是否可行。

源码如下:

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 应用程序给我以下错误消息:

There was an error opening this document. This file is already open or in use by another application.

FileOptions.DeleteOnClose 没有故意工作....我希望在关闭 Process 应用程序时删除临时文件。

最佳答案

嗯,你有两个问题:

  1. 您需要在启动外部进程之前关闭流。这就是您从 Acrobat 收到“文件正在使用”错误的原因。
  2. 完成#1 后,Process.WaitForExit() 应该会如您所愿地工作

    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();
    }
    }

关于c# - FileStream 自动删除临时文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5080600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com