文件被复制然后抱怨它不存在

时间:2014-05-23 16:03:06

标签: c# asp.net

我有以下代码;

string oldPath = @"C:\\Users\\akclark.DOMAIN-A\\Documents\\Visual Studio 2013\\WebSites\\Quote\\quote.xlsx";
string newFileName = "" + GlobalVariables.quoteNumber + "_" + GlobalVariables.quoteRevision + ".xlsx";
string newPath = @"C:\\Users\\akclark.DOMAIN-A\\Documents\\Visual Studio 2013\\WebSites\\Quote\\" + newFileName;
FileInfo f1 = new FileInfo(oldPath);
if (f1.Exists)
{
    FileInfo f2 = new FileInfo(newPath);
    if (f2.Exists){
    File.Delete(newPath);
    } else {

        File.Copy(oldPath, newPath);
        Response.ContentType = "application/vnd.ms-excel";
        Response.AddHeader("content-length", f2.Length.ToString());
        Response.TransmitFile(newPath);
        Response.End();

    }
}

else
{
    Label20.Visible = true;
    Label20.Text = "Excel Template not found! Please Contact IT Department with this message.";
}

每次运行代码时,都会在Response.TransmitFile(newPath);处抱怨找不到该文件。

我正在使用Visual Studio 2013 Update 2运行Windows 7 Pro,x64。这是.NET 4.5 Web项目。

但我刚刚将它复制了三行。我做错了什么?

2 个答案:

答案 0 :(得分:2)

这是问题所在:

@"C:\\Users\\akclark.DOMAIN-A\\Documents\\Visual Studio 2013\\WebSites\\Quote\\"

逐字字符串+双反斜杠=具有双反斜杠的文件路径,可由FileInfoResponse.TransmitFile以不同方式处理。

答案 1 :(得分:1)

用以下行替换您的代码

if (f2.Exists)
            {
                File.Delete(newPath);
            }
            else
            {
                File.Copy(oldPath, newPath);
                f2 = new FileInfo(newPath);
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("content-length", f2.Length.ToString());
                Response.TransmitFile(newPath);
                Response.End();

            }

你的代码有Response.AddHeader(" content-length",f2.Length.ToString());并且f2在复制之前初始化,因此无法找到并抛出未找到的错误文件。