FileStream弹出响应后删除临时文件

时间:2014-03-06 12:03:56

标签: c# asp.net-mvc filestream

在进行更改后,我使用Interop to SaveAs(D:/ Temp)模板excel表。 然后我使用FileStream向用户发送弹出窗口以保存此文件。但是D:\ Temp中的那个文件仍然存在。 有没有办法在弹出响应中删除此文件?

//Save the Excel File
SaveExcelFile(exportPath, sourceFile, excelWorkBook,
                excelApllication, excelWorkSheet);

#region Pop Up and File Open
if (System.IO.File.Exists(sourceFile))
{
    FileStream fsSource = 
        new FileStream(sourceFile, FileMode.Open, FileAccess.Read);

    return File(fsSource, "application/vnd.ms-excel", "FileName" + .xls");
}
else
{
    return View();
}
#endregion

4 个答案:

答案 0 :(得分:4)

删除一个文件

string filePath)= @"C:\MyDir\filename.txt";
public bool RemoveFile(string filePath)
{
try
{
if (File.Exists(filePath))
{
File.Delete(filePath);
return true;
}
else
return true;
}
catch (Exception ex)
{
return false;
}
}

删除所有文件

string[] filePaths = Directory.GetFiles(@"c:\MyDir\");
foreach (string filePath in filePaths)
  File.Delete(filePath);

使用一个代码行删除所有文件

Array.ForEach(Directory.GetFiles(@"c:\MyDir\"),
              delegate(string path) { File.Delete(path); });

答案 1 :(得分:2)

您可以使用File.Delete方法。

if (File.Exists("File_Path"))
{
 File.Delete("File_Path");
}

<强>更新

要下载binary个文件,

using (FileStream fs = File.OpenRead(path))
{
    int length = (int)fs.Length;
    byte[] buffer;

    using (BinaryReader br = new BinaryReader(fs))
    {
        buffer = br.ReadBytes(length);
    }

    Response.Clear();
    Response.Buffer = true;
    Response.AddHeader("content-disposition", String.Format("attachment;filename={0}", Path.GetFileName(path)));
    Response.ContentType = "application/" + Path.GetExtension(path).Substring(1);
    Response.BinaryWrite(buffer);
    Response.Flush();
    Response.End();
}

here

找到此代码

答案 2 :(得分:1)

我建议您首先直接在内存流(即System.IO.MemoryStream)中创建文件,而不是创建临时文件,将其加载到流,然后尝试删除它,所以你不要必须加载并删除它。

如果无法直接在内存流中创建它,主要问题是当您在FileStream中使用它时无法删除临时文件。在这种情况下,您将FileStream复制到MemoryStream,关闭并释放FileStream,删除临时文件,然后将MemoryStream返回给用户。

您可以使用bellow功能正确复制流。

// Author: Racil Hilan.
/// <summary>Copies data from a source stream to a target stream.</summary>
private static void CopyStream(Stream SourceStream, Stream TargetStream) {
  const int BUFFER_SIZE = 4096;
  byte[] buffer = new byte[BUFFER_SIZE];
  //Reset the source stream in order to process all data.
  if (SourceStream.CanSeek)
    SourceStream.Position = 0;
  //Copy data from the source stream to the target stream.
  int BytesRead = 0;
  while ((BytesRead = SourceStream.Read(buffer, 0, BUFFER_SIZE)) > 0)
    TargetStream.Write(buffer, 0, BytesRead);
  //Reset the source stream and the target stream to make them ready for any other operation.
  if (SourceStream.CanSeek)
    SourceStream.Position = 0;
  if (TargetStream.CanSeek)
    TargetStream.Position = 0;
}

答案 3 :(得分:0)

您可以使用File.Delete()。在您尝试删除文件之前,只需确保已关闭流,最好是,您已经能够发送所需内容。

如果主操作失败,我猜你不想删除文件。