2017-05-24 1 views
-1

Ich versuche, einen FileStream mit einem relativen Pfad zu verwenden, aber es funktioniert nicht.FileStream funktioniert nicht mit relativen Pfad

var pic = ReadFile("~/Images/money.png"); 

Es funktioniert, wenn ich so etwas wie verwenden:

var p = GetFilePath(); 
var pic = ReadFile(p); 

der Rest des Codes (von SO):

public static byte[] ReadFile(string filePath) 
     { 
      byte[] buffer; 
      FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); 
      try 
      { 
       int length = (int)fileStream.Length; // get file length 
       buffer = new byte[length];   // create buffer 
       int count;       // actual number of bytes read 
       int sum = 0;       // total number of bytes read 

       // read until Read method returns 0 (end of the stream has been reached) 
       while ((count = fileStream.Read(buffer, sum, length - sum)) > 0) 
        sum += count; // sum is a buffer offset for next reading 
      } 
      finally 
      { 
       fileStream.Close(); 
      } 
      return buffer; 
     } 

     public string GetFilePath() 
     { 
      return HttpContext.Current.Server.MapPath("~/Images/money.png"); 
     } 

ich nicht, warum es nicht funktioniert weil der FileStream-Konstruktor die Verwendung eines relativen Pfades erlaubt.

+4

'~' bezeichnet einen virtuellen Pfad, der nicht das gleiche wie ein relativer Pfad ist. MapPath löst das in einem physischen Pfad auf. –

+1

https://weblog.west-wind.com/posts/2009/Dec/21/Making-Sense-of-ASPNET-Paths Dies wird Ihnen helfen, die Unterschiede zwischen den Pfadtypen zu verstehen –

Antwort

1

Ich nehme an, der Ordner in Ihrem Programm hat die Unterordner Bilder, die Ihre Bilddatei enthält.

\folder\program.exe

\folder\Images\money.jpg

Versuchen ohne die "~".

0

Ich hatte auch das gleiche Problem, aber ich löste es durch diesen Code verwenden,

Versuchen Sie eine dieser Code, hoffen, dass es auch Ihr Problem lösen wird.

#region GetImageStream 
    public static Stream GetImageStream(string Image64string) 
    { 
     Stream imageStream = new MemoryStream(); 
     if (!string.IsNullOrEmpty(Image64string)) 
     { 
      byte[] imageBytes = Convert.FromBase64String(Image64string.Substring(Image64string.IndexOf(',') + 1)); 
      using (Image targetimage = BWS.AWS.S3.ResizeImage(System.Drawing.Image.FromStream(new MemoryStream(imageBytes, false)), new Size(1600, 1600), true)) 
      { 
       targetimage.Save(imageStream, ImageFormat.Jpeg); 
      } 
     } 
     return imageStream; 
    } 

    #endregion 

2. ein

#region GetImageStream 
    public static Stream GetImageStream(Stream stream) 
    { 
     Stream imageStream = new MemoryStream(); 
     if (stream != null) 
     { 
      using (Image targetimage = BWS.AWS.S3.ResizeImage(System.Drawing.Image.FromStream(stream), new Size(1600, 1600), true)) 
      { 
       targetimage.Save(imageStream, ImageFormat.Jpeg); 
      } 
     } 
     return imageStream; 
    } 

    #endregion