2011-11-17 91 views
14

Tengo esta función que obtiene el archivoData como una matriz de bytes y una ruta de archivo. El error que recibo es cuando intenta establecer el archivo Info en el código bewlo. Se dice 'Ruta físicas determinadas, Virtual Path espera'convertir de la ruta física a la ruta virtual

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

Al depurar ella, está proporcionando la rutaArchivo como "E:\\WEBS\\webapp\\default\\images\\mains\\myimage.jpg". Y el mensaje de error es

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

Además, lo que está provocando que esto suceda es la siguiente llamada

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

se puede saber por qué los votos negativos Soy nuevo en C#. Sea considerado – user710502

+0

¿Entiende lo que 'MapPath' hace y lo que su código está tratando de hacer? – SLaks

+0

Este es el código existente, no lo escribí ... ¿Tengo entendido que MapPath es una función que tomará la ruta virtual y la traducirá a la ruta del servidor ?, pero de nuevo, soy nuevo y tal vez pase por alto lo obvio. Sin ser grosero, vine a este foro para hacer una pregunta de la que no estoy seguro. No hay necesidad de votar abajo ... Me imagino que esto es lo que los foros son para no? De lo contrario, voy a ir perfil por perfil y hacer un montón de votos negativos solo por el diablo – user710502

Respuesta

19

Si ya tiene una ruta física, que no tiene sentido para llamar Server.MapPath.

Llamas al MapPath dos veces.

+1

Gracias, entonces en vez de usar Server.MapPath, ¿para qué debería reemplazar esa línea de código? – user710502

1

¿Puedo entender que su proyecto se encuentra en:

E:\WEBS\\webapp\ 

usted debe tratar de utilizar referencias relativas a las imágenes por ejemplo,

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

de Trabajo:

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 
    } 

no funciona:

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 
    } 

no uso Server.Mappath dos veces

Cuestiones relacionadas