如何在c#中读取作为终端输入的二进制文件

How to read a binary file given as input at terminal in c#

本文关键字:终端 输入 二进制文件 读取      更新时间:2023-10-16

我是c#新手,正在尝试读取二进制文件。我在c++中这样做:

int main(int argc, char * * argv) 
{
    FILE * fp;
    fp = fopen(argv[1], "rb"); //argv[1] because while executing at terminal the binary file to be read is at second postion like "./filename.c BinaryInutFile.bin" so at argv[0] we have ./filename.c and at argv[1] we have Binaryfile.bin
    ch = fgetc(fp);
    while (fread( & ch, sizeof(ch), 1, fp)) 
    {
        add_symbol(ch); //this add_symbol()i will use somewhere else, so not so important for now.
    }
    fclose(fp); 
}

所以我想帮助编写等效的c#代码。感谢这些帮手。注意:我不知道文件的大小和文件名,但它是一个二进制文件,我的意思是用户可以在终端更改二进制文件,它应该适用于他检查输出的所有二进制文件的数量。我将在终端执行像这样的"mono filename.exe BinaryFile.bin",其中文件名.exe是通过编译包含此代码的文件名.cs(通过做"gmcs filename.cs")形成的文件,BinaryFile.cs将是要在我的代码和"mono"上进行测试的binaryfile文件,因为我在Ubantu上工作,我使用"gmcs filename.cs"进行编译,它将给出文件名.exe BinaryFile.bin"

在c#中有很多读取文件的方法。如果你想要一个流方式,它看起来像:

public static void Main(string[] args)
{
    // your command line arguments will be in args
    using (var stream = new BinaryReader(System.IO.File.OpenRead(args[0])))
    {
        while (stream.BaseStream.Position < stream.BaseStream.Length)
        {
            // all sorts of functions for reading here:
            byte processingValue = stream.ReadByte();
        }
    }
}

如果您正在处理一个较小的文件,也可以选择通过以下调用将整个文件读入内存(字符串变量):

string entireFile = System.IO.File.ReadAllText(fileNamePath);

这两种方法都可以——具体的用法取决于你的具体情况。祝你好运!

EDIT -编辑示例以包含一个主例程,以便可以演示。要使用这个例子,你需要创建一个"控制台应用程序"项目,并使用visual studio或命令行(MSBuild或同等工具)进行构建。希望这能让你走上正确的道路!