Проверьте, существует ли файл на сервере - PullRequest
13 голосов
/ 01 июня 2011

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

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

Ответы [ 8 ]

46 голосов
/ 01 июня 2011

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

if (File.Exists(Server.MapPath(wordDocName)))
2 голосов
/ 01 июня 2011

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

Ваш wordDocName является относительным URL.

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

string fileName = Server.MapPath(wordDocName);
1 голос
/ 01 июня 2011

Вам нужно использовать 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;
    }
1 голос
/ 01 июня 2011

Используйте

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

, чтобы получить полный путь.Это должно помочь тебе.

0 голосов
/ 14 октября 2014

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

0 голосов
/ 17 сентября 2014

string docname="traintatkalantnoy.txt";

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

0 голосов
/ 01 июня 2011

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

0 голосов
/ 01 июня 2011

Необходимо преобразовать путь в физический путь с помощью Server.MapPath (lativePath)

if (File.Exists(filePath))

wordDocName = "~/specifications/" + ViewState["projectSelected"] + ".doc";        
btnDownloadWordDoc.Visible = File.Exists(Server.MapPath(wordDocName));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...