Конвертировать из физического пути в виртуальный путь

У меня есть эта функция, которая получает fileData как массив байтов и путь к файлу. Ошибка, которую я получаю, это когда он пытается установить fileInfo в коде bewlo. В нем говорится "Указанный физический путь, ожидаемый виртуальный путь"

 public override void WriteBinaryStorage(byte[] fileData, string filePath)
    {
        try
        {
            // Create directory if not exists.
            System.IO.FileInfo fileInfo = new System.IO.FileInfo(System.Web.HttpContext.Current.Server.MapPath(filePath)); //when it gets to this line the error is caught
            if (!fileInfo.Directory.Exists)
            {
                fileInfo.Directory.Create();
            }

            // Write the binary content.
            System.IO.File.WriteAllBytes(System.Web.HttpContext.Current.Server.MapPath(filePath), fileData);
        }
        catch (Exception)
        {
            throw;
        }
    }

При отладке он предоставляет filePath как "E:\\WEBS\\webapp\\default\\images\\mains\\myimage.jpg". И сообщение об ошибке

'E:/WEBS/webapp/default/images/mains/myimage.jpg' is a physical path, but a virtual path was expected.

Кроме того, что это за запуск, это следующий вызов

properties.ResizeImage(imageName, Configurations.ConfigSettings.MaxImageSize, Server.MapPath(Configurations.EnvironmentConfig.LargeImagePath));

Ответы

Ответ 1

Если у вас уже есть физический путь, нет смысла называть Server.MapPath.

Вы дважды вызываете MapPath.

Ответ 2

В:

    string[] filesPath = Directory.GetFiles(Server.MapPath("~/txtPath/"));        
    foreach (string path in filesPath)
    {
        FileInfo fi = new FileInfo(path);      //This Is Working
       string LastAcceTime = fi.LastWriteTime; //Return Correct Value
    }

Не работает:

    string[] filesPath = Directory.GetFiles(Server.MapPath("~/txtPath/"));        
    foreach (string path in filesPath)
    {
        FileInfo fi = new FileInfo(Server.MapPath(path));  //This Is Worng
       string LastAcceTime = fi.LastWriteTime;             //Return 1/1/1601 
    }

Не используйте Server.Mappath дважды

Ответ 3

Я полагаю, что ваш проект находится по адресу:

E:\WEBS\\webapp\

Вам следует попытаться использовать относительные ссылки на ваши изображения, например.

..\default\images\mains\myimage.jpg