2017-02-06 38 views
0

我試圖用nQuant將文件夾中的所有pngs轉換爲8bpp png。我試着用下面的代碼:在同一個FileStream上讀寫

foreach (string file in Directory.GetFiles(tempFolderPath, "*.png", SearchOption.TopDirectoryOnly)) 
     { 
      using (MemoryStream memory = new MemoryStream()) 
      { 
       using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite)) 
       { 
        using (Bitmap image = new Bitmap(fs)) 
        { 
         using (Image quantized = quantizer.QuantizeImage(image)) 
         { 
          quantized.Save(memory, ImageFormat.Png); 
          byte[] bytes = memory.ToArray(); 
          fs.Write(bytes, 0, bytes.Length); 
         } 
        } 
       } 
      } 
     } 

然而,這是行不通的。沒有例外。只是不寫入文件。我用這個工作代碼取代了它。

Bitmap image; 
foreach (string file in Directory.GetFiles(tempFolderPath, "*.png", SearchOption.TopDirectoryOnly)) 
     { 
      using (FileStream fso = new FileStream(file, FileMode.Open, FileAccess.ReadWrite)) 
      { 
       image = new Bitmap(fso); 
      } 

      using (MemoryStream memory = new MemoryStream()) 
      { 
       using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.ReadWrite)) 
       { 
        using (Image quantized = quantizer.QuantizeImage(image)) 
        { 
         quantized.Save(memory, ImageFormat.Png); 
         byte[] bytes = memory.ToArray(); 
         fs.Write(bytes, 0, bytes.Length); 
        } 
       } 
      } 
     } 

好像FileMode.OpenOrCreate可以做一個或另一個,但不是兩個。

無論如何讀取和寫在同一FileStream

+0

做一個快速的谷歌搜索下面的'C#Stackoverflow閱讀和寫入相同的FileStream' – MethodMan

+0

@MethodMan是的我發現[this](http://stackoverflow.com/questions/605685/how-to-both-read並且寫入一個c-sharp文件),我使用了最上面的答案。我也發現[這](http://stackoverflow.com/questions/33633344/read-and-write-to-a-file-in-the-same-stream)並嘗試添加fs.Flush(),但也是沒有工作。 – I23BigC

回答

1

您的代碼只是將這些圖像的內容連接到一個文件,因爲您沒有重置文件流中的位置。

但是使用一個流是不好主意。如果您的新文件比舊文件小,則您的結果將被破壞,因爲文件不會被調整爲較小的大小。

改爲使用臨時文件。