2011-11-17 61 views
14

Tôi có hàm này nhận tệpData là mảng byte và đường dẫn tệp. Lỗi tôi nhận được là khi nó cố gắng đặt tập tinInfo trong mã bewlo. Nó nói 'Đường dẫn vật lý được cung cấp, Đường dẫn ảo được mong đợi'chuyển đổi từ đường dẫn vật lý sang đường dẫn ảo

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

Khi gỡ lỗi, cung cấp tệpPath là "E:\\WEBS\\webapp\\default\\images\\mains\\myimage.jpg". Và thông báo lỗi là

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

Ngoài ra, những gì nó được kích hoạt này xảy ra là tiếng gọi sau

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

Tôi có thể biết lý do tại sao các phiếu chống Tôi mới đến C#. Vui lòng cân nhắc – user710502

+0

Bạn có hiểu những gì 'MapPath' thực hiện và mã của bạn đang cố gắng làm gì không? – SLaks

+0

Đây là mã hiện có, tôi đã không viết nó .. Sự hiểu biết của tôi là MapPath là một hàm sẽ lấy đường dẫn ảo và dịch nó thành đường dẫn máy chủ ?, nhưng một lần nữa tôi mới và tôi có thể nhìn rõ ràng. Nếu không có sự thô lỗ, tôi đã đến diễn đàn này để đặt một câu hỏi mà tôi không chắc chắn. Không cần phải bỏ phiếu xuống .. Tôi tưởng tượng đây là những gì diễn đàn là không? Khác khôn ngoan tôi chỉ đi để đi hồ sơ cá nhân của hồ sơ và làm một loạt các phiếu tiêu cực chỉ vì heck của nó – user710502

Trả lời

19

Nếu bạn đã có một con đường vật lý, nó không có ý nghĩa để gọi Server.MapPath.

Bạn đang gọi số MapPath hai lần.

+1

Cảm ơn bạn, vì vậy thay vì sử dụng Server.MapPath, tôi nên thay thế dòng mã đó để làm gì? – user710502

1

Tôi mang nó rằng dự án của bạn tọa lạc tại địa chỉ:

E:\WEBS\\webapp\ 

Bạn nên thử và sử dụng tài liệu tham khảo liên quan đến hình ảnh của bạn ví dụ

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

làm việc:

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 
    } 

Không làm việc:

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 
    } 

Dont sử dụng Server.Mappath hai lần

Các vấn đề liên quan