在 C# FileStream 中用 3 个字节替换一个字节

Replace one Byte with 3 in C# FileStream

我正在浏览一个文件并从中创建一个 CSV。我有列分隔符,但不确定如何将一个字节替换为三个。

    public static FileStream stream = new FileStream(@"test.dat", FileMode.Open, FileAccess.Read);
    public static FileStream shortFile = null;
    int limit = 3000;

    public MainWindow()
    {
        byte[] block = new byte[limit];
        using (FileStream fs = File.Create("tempfile.dat"))
        {
            stream.Position = 205000000;
            stream.Read(block, 0, limit);
            Console.WriteLine(Encoding.Default.GetString(block));
            File.WriteAllText("test.dat", Regex.Replace(Encoding.Default.GetString(block), "[\x00]{2,}", ""));

            for (int i = 0; i < block.Length; i++)
            {
                if (block[i] == 0x10)
                {
                    block[i] = ???;//// If I wanted to insert a "," here, how would I do that?
                }
            }
        InitializeComponent();
    }

代码中的注释

你的代码有几个问题,最后我会选择不同的方法

  1. public static FileStream streampublic static FileStream shortFile - 像这样坚持 FileStream 是不常见的,尤其是在静态字段中。如果可能的话,我会考虑将所有持有非托管资源句柄的流放在 using 块中。

  2. MainWindow 加载(在构造函数中)之前,您已拥有所有代码。如果这是一个昂贵的过程,它将阻止您的表单加载,而且如果有异常则更难处理。此外,您将无法使此代码轻松使用 async/await 模式。

  3. 你真的不能很容易地将额外的元素插入到一个数组中,你通常必须分配一个新数组,复制、插入、复制来实现这一点。

  4. 您似乎在同时处理字节和字符串。如果您正在处理文本文件,那么最好使用已经考虑到 Unicode 的 类。

  5. 而且我认为这是最重要的一个。如果你真的想创建一个 csv 文件,为自己节省大量时间和精力,并使用专用的 csv 库。阅读您的源文件,添加到您的列和行,然后保存。