在进行更改后,我使用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
答案 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()
。在您尝试删除文件之前,只需确保已关闭流,最好是,您已经能够发送所需内容。
如果主操作失败,我猜你不想删除文件。