[英]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.