2017-02-06 4 views
0

Ich versuche, all die pngs in einem Ordner zu konvertieren pngs nQuant mit 8bpp. Ich habe versucht, mit dem folgenden Code:Lesen und Schreiben auf demselben 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); 
         } 
        } 
       } 
      } 
     } 

Dies funktioniert jedoch nicht. Keine Ausnahmen. Einfach nur nicht in die Datei schreiben. Ich habe es mit diesem Arbeitscode ersetzt.

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

Scheint, wie FileMode.OpenOrCreate man tun kann, oder das andere, aber nicht beides.

Gibt es trotzdem auf die gleichen FileStream zu lesen und schreiben?

+0

am folgenden 'C# Stackoverflow Lesen eine schnelle Google-Suche und Schreiben auf gleiche FileStream' – MethodMan

+0

@MethodMan Ja fand ich [diese] (http://stackoverflow.com/questions/605685/how-to-both-read -und-schreibe-eine-Datei-in-c-sharp) und ich benutzte die beste Antwort. Ich fand auch [dies] (http://stackoverflow.com/questions/33633344/read-and-write-to-a-file-in-the-same-stream) und versuchte, fs.Flush() hinzuzufügen, aber das auch hat nicht funktioniert. – I23BigC

Antwort

1

Ihr Code verkettet nur Inhalt dieser Bilder in einer Datei, wie Sie nicht Position in der Stream-Datei zurückzusetzen sind.

Aber es ist keine gute Idee einen Strom zu verwenden. Wenn Ihre neue Datei kleiner als alt ist, wird Ihr Ergebnis beschädigt, da die Größe der Datei nicht kleiner wird.

Verwenden Tempakten statt.