Проверьте, существует ли файл на сервере

Я пытаюсь проверить, находится ли файл на сервере с кодом С# позади моей веб-страницы ASP.NET. Я знаю, что файл существует, поскольку я помещал его на сервер в кусок кода перед раздачей. Может ли кто-нибудь понять, почему он не находит файл. Это код:

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

Ответ 1

путь к файлу должен быть физическим, а не виртуальным. Используйте

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

Ответ 2

File.Exists() и, возможно, для всего остального, что вы хотите сделать с файлом, потребуется реальный Путь.

Ваш wordDocName - относительный URL.

Просто используйте

string fileName = Server.MapPath(wordDocName);

Ответ 3

Используйте

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

чтобы получить полностью определенный путь. Это должно сделать трюк для вас.

Ответ 4

Вам нужно использовать 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;
    }

Ответ 5

Вам нужно преобразовать путь к физическому пути с помощью Server.MapPath(relativePath)

if (File.Exists(filePath))

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

Ответ 6

Символ "~" - это специальный char в ASP.NET для получения спецификаций пути виртуальный и просто означает "корневой каталог приложения". Это не понимается .NET BCL, как API File, и сначала должен быть отображен в физический путь с Server.MapPath(), как указано другими.

Ответ 7

это может не сработать, если ссылка на каталог, на который ссылается файл, ссылается на ссылку/символическую ссылку. У меня этот случай в моем собственном приложении, и если я поместил путь REAL в файл, File.Exists() вернет true. Но если я использую Server.MapPath, но папка на самом деле является переходом к папке, она, похоже, терпит неудачу. Кто-то испытал такое же поведение?

Ответ 8

string docname="traintatkalantnoy.txt";

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