Как проверить, существует ли файл в ASP.NET MVC 4
Я работаю над ASP.NET MVC 4
приложение. Я разрешаю пользователям загружать файлы, но я хочу сохранить их с другим именем на сервере, поэтому я создал вспомогательный метод, который должен вернуть GUID
использовать. Даже если это, вероятно, никогда не произойдет, я хочу проверить, есть ли у меня файл с тем же GUID
имя, поэтому у меня есть это как код:
public static string GetUniqueName(string pathToFile)
{
bool IsUnique = false;
string guid = null;
while (!IsUnique)
{
guid = Guid.NewGuid().ToString("N");
var path = System.IO.Path.Combine(pathToFile, "login.jpg");
if (!System.IO.File.Exists(path))
{
IsUnique = true;
}
}
return guid;
}
как вы можете видеть имя файла жестко только для целей тестирования, потому что я знаю, что есть такие файл.
чтобы сохранить файл, я использую это:
var path = System.IO.Path.Combine(Server.MapPath("~/Content/NewsImages"), fileName);
и все работает нормально. Поэтому, когда я попытался вызвать свой статический метод, я передаю arbument следующим образом:
string test = Helper.GetUniqueName("~/Content/NewsImages");
но потом в debug я увидел, что
System.IO.Path.Combine(pathToFile, "login.jpg");
возвращает ~/Content/NewsImageslogin.jpg
поэтому я решил изменить аргумент, который я передаю:
string test = Helper.GetUniqueName("~ContentNewsImages");
что теперь приводит к ~ContentNewsImageslogin.jpg
который кажется прекрасным, но затем в:
if (!System.IO.File.Exists(path))
{
IsUnique = true;
}
Я передаю чек, хотя и знаю, что такой файл существует в каталоге, который я хочу проверить. Как я могу это исправить?
1 ответов
при вызове вспомогательного метода, вы должны использовать сервер.MapPath, это преобразуется из виртуального пути в физический путь, например
string test = Helper.GetUniqueName(Server.MapPath("~/Content/NewsImages"));