在同一个 FileStream 上读写
Reading and Writing on same FileStream
我正在尝试使用 nQuant 将文件夹中的所有 png 转换为 8bpp png。我尝试使用以下代码:
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
?
您的代码只是将这些图像的内容连接到一个文件中,因为您没有重置文件流中的位置。
但是使用一个流是个坏主意。如果您的新文件小于旧文件,您的结果将被破坏,因为文件不会被调整到更小的尺寸。
改用临时文件。
我正在尝试使用 nQuant 将文件夹中的所有 png 转换为 8bpp png。我尝试使用以下代码:
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
?
您的代码只是将这些图像的内容连接到一个文件中,因为您没有重置文件流中的位置。
但是使用一个流是个坏主意。如果您的新文件小于旧文件,您的结果将被破坏,因为文件不会被调整到更小的尺寸。
改用临时文件。