ASP.NET System.IO.File.Delete не работает - физический путь, но ожидался виртуальный путь - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь удалить файл с сервера через ASP.NET. Я пытаюсь использовать System.IO.File.Delete следующим образом:

try
{
    var filePath = System.Web.HttpContext.Current.Server.MapPath("C:/www/project/Images/" + landingCells.imageBytes);
    if (System.IO.File.Exists(filePath))
    {
        System.IO.File.Delete(filePath);
    }
}
catch
{
    return false;
}

Но каждый раз, когда он возвращает false, яв состоянии записать файл на сервер:

try
{
    System.IO.File.WriteAllBytes("C:/www/project/Images/" + filePath, bytes);
}
catch
{
    return false;
}

Но я не могу удалить файл, да, путь и имя файла указаны верно, папка имеет полный контроль, что я делаю неправильно?

Это ошибка, которую я получил:

An error occured: ‘C:/www/project/Images/ANW00012018053015551423458244a89b23-5ed7-42a3-a2fc-4b15a90fb3cf.jpg' is a physical path, but a virtual path was expected.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Причина, по которой мы используем Server.MapPath, заключается в том, что мы не хотим жестко кодировать путь к файлу внутри кода.

try
{
    string fileName = "Sample.jpg";
    var filePath = Server.MapPath("~/Images/" + fileName); // Do not pass byte array here
    if (System.IO.File.Exists(filePath))
    {
        System.IO.File.Delete(filePath);
    }
}
catch
{
    // Do not swallow the exception. Instead, log them to persistant storage.
}
0 голосов
/ 30 мая 2018

Прежде всего, очень рискованный подход заключается в жестком кодировании пути к папке.Что если администратор переместит приложение на диск D?

ИМХО проблема здесь: var filePath = System.Web.HttpContext.Current.Server.MapPath("C:/www/project/Images/" + landingCells.imageBytes);

Вы пытаетесь получить доступ к потоку, поэтому путь очень длинный и выглядит более илименьше как "C: \ www \ project \ Images \ 0x00a00efe ............." (поэтому путь здесь очень длинный).Вместо свойства imageBytes следует использовать имя файла.

Кроме того, когда вы сталкиваетесь с похожими проблемами, перехват исключений и их регистрация очень полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...