按十六进制地址拆分文件

时间:2018-04-13 19:32:56

标签: c# .net

尝试将文件按十六进制地址拆分为十六进制地址时遇到困难。 好像它的分裂很好,但是当我检查文件时,它总是复制文件开头的每个字节而不是起始地址。

请让我知道我哪里出错了 输入字符串是十六进制地址(字符串)转换为long

    private void HexSplit(string inputFile, string outputFile, string startAddress, string endAddress)
    {
        FileStream hexReader = new FileStream(inputFile, FileMode.Open);
        FileStream hexWriter = new FileStream(outputFile, FileMode.Create);

        long StartAddress = Convert.ToInt64(startAddress.ToUpper(), 16);
        long EndAddress = Convert.ToInt64(endAddress.ToUpper(), 16);

        int bytecount = 0;
        while (bytecount != EndAddress)
        {
            if (bytecount >= StartAddress && bytecount <= EndAddress) hexWriter.WriteByte((byte)hexReader.ReadByte());
            bytecount++;
        }

        hexReader.Close();
        hexReader.Dispose();
        hexWriter.Close();
        hexWriter.Dispose();
    }

1 个答案:

答案 0 :(得分:1)

您应该阅读输入以使阅读器位于当前起点

byte b = hexReader.ReadByte();
if (bytecount >= StartAddress && bytecount <= EndAddress) 
    hexWriter.WriteByte(b);

bytecount++;

或者您可以使用Filestream.Position属性直接设置正确的起点,避免读取输入文件中不必要的部分

long byteCount = StartAddress;
hexReader.Position = StartAddress;
while (bytecount <= EndAddress)
{
    hexWriter.WriteByte((byte)hexReader.ReadByte());
    bytecount++;
}

请注意,在这两种情况下都应检查传递的输入,因为如果地址大于文件的长度,您将收到异常

if(hexReader.Length < EndAddress)
   // Error message and return