2009-11-06 217 views
2

我需要臨時將文件上傳到MemoryStream。將文件上傳到MemoryStream(C#)的最佳做法是什麼?

什麼是最好的方法來做到這一點使用asp.net(3.5)?

這是我到目前爲止。它工作(本地測試),但它看起來不正確。

protected void lnkUploadFile_Click(object sender, EventArgs e) 
    { 
     MemoryStream memStream = new MemoryStream(); 

     BinaryWriter sWriter = new BinaryWriter(memStream); 

     foreach (byte b in flUpload.FileBytes) 
     { 
      sWriter.Write(b); 
     } 

     sWriter.Flush(); 

     // writing to file to verify file stream converted correctly 
     FileStream fstream = new FileStream(@"C:/test/" + flUpload.FileName, FileMode.Create);   
     memStream.WriteTo(fstream);   
     fstream.Dispose(); 

     memStream.Dispose(); 
    } 

回答

3

如果flUpload.FileBytes是一個字節數組,你可以使用接受所包含的數據作爲參數的MemoryStream構造函數:

MemoryStream memStream = new MemoryStream(flUpload.FileBytes); 

如果不是(如果它只是實現IEnumerable),就可以將其轉換到一個字節數組使用Linq:

MemoryStream memStream = new MemoryStream(flUpload.FileBytes.ToArray()); 
+0

謝謝,我知道我在做很多工作。 – 2009-11-09 15:27:17

0

可能更容易使用作爲一個字符串......一切取決於你將要用它做什麼我猜。

System.IO.StreamReader reader = new System.IO.StreamReader("path"); 
string file = reader.ReadToEnd(); 

或者,如果你需要的字節居然還有一小段代碼片段「filReadBin」您可以使用此產生:

byte[] fileContents; 
fileContents = System.IO.File.ReadAllBytes(@"C:\Test.txt"); 
1
protected void lnkUploadFile_Click(object sender, EventArgs e) 
    { 
     using (MemoryStream memStream = new MemoryStream(flUpload.FileBytes)) 
     { 
      using (FileStream fstream = new FileStream(@"C:/test/" + 
       flUpload.FileName, FileMode.Create)) 
      { 
       memStream.WriteTo(fstream); 
      } 
     } 
    } 
0

短短三線。

if (flUpload.FileName.Length > 0) 
{ 
    string directoryPath="C:\\SomeFolderName"; 
    flUpload.SaveAs(directoryPath + "\\" + fileUpload.FileName); 
} 
+0

問題是針對內存流,而不是文件 – mosheb 2017-03-03 17:25:49

相關問題