簡體   English   中英

檢查服務器上是否存在文件

[英]Check if a file exists on the server

我正在嘗試使用我的 ASP.NET web 頁面后面的 C# 代碼檢查服務器上是否存在文件。 我知道該文件確實存在,因為我事先將它放在一段代碼中的服務器上。 誰能看到為什么找不到文件。 這是代碼:

wordDocName = "~/specifications/" + Convert.ToInt32(ViewState["projectSelected"]) + ".doc";
ViewState["wordDocName"] = wordDocName;
if (File.Exists(wordDocName))
{
    btnDownloadWordDoc.Visible = true;
}
else
{
    btnDownloadWordDoc.Visible = false;
}

文件路徑應該是物理的而不是虛擬的。 利用

if (File.Exists(Server.MapPath(wordDocName)))

File.Exists()並且可能您想要對文件執行的所有其他操作都需要一個真實的路徑。

您的wordDocName是相對的 URL。

只需使用

string fileName = Server.MapPath(wordDocName);

利用

Server.MapPath("~/specifications/" + Convert.ToInt32(ViewState["projectSelected"]) + ".doc")

獲得完全合格的路徑。 那應該對你有用。

您需要使用Server.MapPath例如

    wordDocName = Server.MapPath("~/specifications/" + Convert.ToInt32(ViewState["projectSelected"]) + ".doc");
    ViewState["wordDocName"] = wordDocName;
    if (File.Exists(wordDocName))
    {
        btnDownloadWordDoc.Visible = true;
    }
    else
    {
        btnDownloadWordDoc.Visible = false;
    }

如果包含文件的目錄被連接/符號鏈接引用,這可能不起作用。 我在自己的應用程序中有這種情況,如果我將真實路徑放入文件,File.Exists() 返回 true。 但是如果我使用 Server.MapPath 但文件夾實際上是文件夾的連接點,它似乎失敗了。 有人經歷過同樣的行為嗎?

您必須使用 Server.MapPath(relativePath) 將路徑轉換為物理路徑

if (File.Exists(filePath))

wordDocName = "~/specifications/" + ViewState["projectSelected"] + ".doc";        
btnDownloadWordDoc.Visible = File.Exists(Server.MapPath(wordDocName));

字符“ ~ ”是 ASP.NET 中的一個特殊字符,用於獲取虛擬路徑規范,簡單地表示“應用程序的根目錄”。 .NET BCL 不理解它,如File API 並且必須首先映射到具有Server.MapPath()物理路徑,如其他所述。

string docname="traintatkalantnoy.txt";

string a = (Server.MapPath(docname)); if (File.Exists(a))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM