You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将逐字节取反读写文件的Node.js脚本转换为等效C#代码

问题背景

现有Node.js文件处理逻辑规则如下:

  • 优先从命令行参数获取输入、输出文件路径,默认值分别为file.txt、result.txt
  • 以二进制方式打开文件,逐1字节同步读取输入内容
  • 对每个字节执行255 - 字节原值的运算后写入输出文件

原Node.js实现代码如下:

let inPath = process.argv[2] || 'file.txt';
let outPath = process.argv[3] || 'result.txt';

fs.open(inPath, 'r', (errIn, fdIn) => {
    fs.open(outPath, 'w', (errOut, fdOut) => {
        let buffer = Buffer.alloc(1);

        while (true) {
            let num = fs.readSync(fdIn, buffer, 0, 1, null);
            if (num === 0) break;
            fs.writeSync(fdOut, Buffer.from([255-buffer[0]]), 0, 1, null);
        }
    });
});

你之前编写的C#代码采用StreamReader逐行读取字符的方案存在逻辑偏差,无法得到和Node版本一致的结果。

原C#代码的核心问题
  • StreamReader是文本读取类,会按照指定编码将原始字节解析为字符,遇到多字节编码的内容时会把多个原始字节合并为一个字符,无法拿到文件的原始单字节值,和原逻辑直接操作二进制字节的规则不符。
  • 没有实现命令行参数读取路径的逻辑,硬编码了文件路径。
  • 字符串拼接的方式处理大文件时性能极差,且最终写入文本时会再次做编码转换,进一步破坏原始字节数据。
正确等效C#实现

C#中直接使用FileStream操作文件原始字节即可完全对齐原Node逻辑,字节运算直接对byte类型做255 - 原值计算即可,无需额外封装,完整代码如下:

using System;
using System.IO;

class ByteReverseProcessor
{
    static void Main(string[] args)
    {
        // 对齐原逻辑的路径读取规则:优先取命令行参数,缺省用默认值
        string inputPath = args.Length >= 1 ? args[0] : "file.txt";
        string outputPath = args.Length >= 2 ? args[1] : "result.txt";

        // 用FileStream直接读写原始字节,不做任何编码转换,对齐Node的二进制读写模式
        using (FileStream inputStream = new FileStream(inputPath, FileMode.Open, FileAccess.Read))
        using (FileStream outputStream = new FileStream(outputPath, FileMode.Create, FileAccess.Write))
        {
            byte[] readBuffer = new byte[1];
            int readCount;
            // 逐1字节同步读取,读到0字节时终止循环
            while ((readCount = inputStream.Read(readBuffer, 0, 1)) > 0)
            {
                // 执行255减原字节值的运算
                byte processedByte = (byte)(255 - readBuffer[0]);
                outputStream.WriteByte(processedByte);
            }
        }
    }
}
逻辑对齐说明
  • 路径规则:和Node版本完全一致,命令行传入的第一个自定义参数为输入路径,第二个为输出路径,缺省值匹配。
  • 读写模式:输入文件以只读模式打开现有文件,输出文件以创建覆盖模式打开,和Node的r、w打开标记行为一致。
  • 处理逻辑:完全不涉及文本编码转换,逐字节读取原始二进制数据做运算后写入,处理结果和Node版本完全一致。
  • 资源管理:using语法块会在读写完成后自动释放文件句柄,避免资源泄漏。

内容的提问来源于stack exchange,提问作者takatto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:30:05