2011-11-17 15 views
14

Mam tę funkcję, która pobiera dane pliku jako tablicę bajtów i ścieżkę do pliku. Otrzymuję błąd, gdy próbuje ustawić fileInfo w kodzie bewlo. To mówi 'Ścieżka fizyczna podane oczekuje Virtual Path'Konwertuj ze ścieżki fizycznej na ścieżkę wirtualną

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; 
     } 
    } 

Podczas debugowania go, jest zapewnienie filePath jak "E:\\WEBS\\webapp\\default\\images\\mains\\myimage.jpg". A komunikat o błędzie jest

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

Ponadto, co jest wyzwalanie tak się stało jest następująca rozmowa

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

Mogę wiedzieć dlaczego negatywne głosy Jestem nowym do C#. Proszę być ostrożnym – user710502

+0

Czy rozumiesz, co robi 'MapPath' i co twój kod próbuje zrobić? – SLaks

+0

To jest istniejący kod, nie napisałem go .. Rozumiem, że MapPath to funkcja, która zajmie ścieżkę wirtualną i przetłumaczy ją na ścieżkę serwerów ?, ale znowu jestem nowy i może z tego powodu nie widać. Nie będąc niegrzecznym, przyszedłem na to forum, aby zadać pytanie, którego nie jestem pewien. Nie ma potrzeby głosowania w dół. Wyobrażam sobie, że to właśnie fora są przeznaczone na nie? Poza tym pójdę profilować profil i zrobię kilka negatywnych głosów tylko dlatego, że tak jest. – user710502

Odpowiedz

19

Jeśli masz już ścieżkę fizyczną, to nie ma sensu nazywać Server.MapPath.

Dwa razy dzwonisz pod numer MapPath.

+1

Dziękuję, więc zamiast używać Server.MapPath, co powinienem zastąpić tą linię kodu? – user710502

1

Biorę go, że projekt znajduje się pod adresem:

E:\WEBS\\webapp\ 

należy spróbować użyć względnych odwołań do obrazów np

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

robocza:

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 
    } 

nie działa:

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 
    } 

nie używaj Server.Mappath dwukrotnie

Powiązane problemy