2013-04-04 2 views
2
ImageURL = String.Format(@"../Uploads/docs/{0}/Logo.jpg", SellerID); 
if (!File.Exists(ImageURL)) 
{ 
    ImageURL = String.Format(@"../Uploads/docs/defaultLogo.jpg", SellerID); 
} 

Каждый раз, когда я проверяю, есть ли файл, я получаю логотип по умолчанию на изображении, есть ли что-то, что разрешено для проверки.Файл существует всегда возвращает false

Примечание: это библиотека классов ссылки на веб-сайте

+0

Этот код запускается удаленно или локально с веб-сайта/службы? – Despertar

+0

его на локальном, однако я получаю defaultLogo, но файл существует, похоже, работает только для полного URL-адреса, любой indepth о том, как работает файл, любая ссылка? – brykneval

ответ

4

Вы должны дать физический путь, а не виртуальный путь (URL), вы можете использовать WebRequest найти, если файл существует на данный url. Вы можете прочитать это article, чтобы просмотреть различные методы проверки наличия ресурса при заданном URL-адресе.

private bool RemoteFileExists(string url) 
{ 
    try 
    { 
     //Creating the HttpWebRequest 
     HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; 
     //Setting the Request method HEAD, you can also use GET too. 
     request.Method = "HEAD"; 
     //Getting the Web Response. 
     HttpWebResponse response = request.GetResponse() as HttpWebResponse; 
     //Returns TURE if the Status code == 200 
     return (response.StatusCode == HttpStatusCode.OK); 
    } 
    catch 
    { 
     //Any exception will returns false. 
     return false; 
    } 
} 

Редактировать на основе комментариев, запуска кода на сервере, где расположены файлы, доступ по URL. Я предполагаю, что ваша папка для загрузки находится в корне каталога веб-сайтов.

ImageURL = String.Format(@"/Uploads/docs/{0}/Logo.jpg", SellerID); 
if(!File.Exists(System.Web.Hosting.HostingEnvironment.MapPath(ImageURL)) 
{ 

} 
+0

жаль сообщить вам позже, но его в библиотеке классов, на которую ссылается веб-приложение – brykneval

+0

Вы можете использовать этот код в библиотеке классов. – Adil

+0

Я нахожусь на локальном, так что нормальный File.Exists бы сделал, я думаю, но его не работает – brykneval

2

Если это в веб-приложении, текущий каталог обычно не соответствует тем, что вы думаете. Например, если IIS обслуживает веб-страницы, текущий каталог может быть где inetsrv.exe или временная директория. Для того, чтобы получить путь к веб-приложению можно использовать

string path = HostingEnvironment.MapPath(@"../Uploads/docs/defaultLogo.jpg"); 
bool fileExists = File.Exists(path); 

http://msdn.microsoft.com/en-us/library/system.web.hosting.hostingenvironment.mappath.aspx

MapPath преобразует путь вы даете его в чем-то относительно вашего веб-приложения. Чтобы убедиться, что путь задан правильно, вы можете использовать отладку трассировки с помощью Trace.Write или написать путь к отладочному файлу (используя абсолютный путь для файла отладки).

Смежные вопросы