Как проверить, существует ли файл в 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"));