【问题标题】:Reading and Writing on same FileStream在同一个 FileStream 上读写
【发布时间】:2017-02-06 22:13:05
【问题描述】:

我正在尝试使用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上读写?

【问题讨论】:

  • 对以下C# Stackoverflow reading and writing to same FileStream进行快速谷歌搜索
  • @MethodMan 是的,我找到了this,我使用了最佳答案。我还找到了this 并尝试添加 fs.Flush() 但这也没有用。

标签: c# filestream overwrite


【解决方案1】:

您的代码只是将这些图像的内容连接到一个文件中,因为您没有重置文件流中的位置。

但是使用一个流是个坏主意。如果您的新文件比旧文件小,您的结果将被破坏,因为文件不会被调整为更小的尺寸。

改用临时文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多