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

时间:2014-03-10 12:03:50

标签: c# c++ algorithm binary binaryfiles

我是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”,其中filename.exe是通过编译包含此代码和BinaryFile的filename.cs(通过执行“gmcs filename.cs”)形成的文件。 cs将是我的代码上测试的bbianry文件和我使用的“mono”,因为我正在使用Ubantu并使用“gmcs FileName.cs”进行编译,这将给出Filename.exe,然后将其作为“mono filename”执行。 exe BinaryFile.bin“

1 个答案:

答案 0 :(得分:1)

有很多方法可以在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);

要么效果很好 - 使用取决于你的情况。祝你好运!

编辑 - 编辑示例以包含主程序,以便进行演示。要使用此示例,您需要创建一个“控制台应用程序”项目,并使用visual studio或使用命令行(MSBuild or equivalent)进行构建。希望能让你走上正轨!