仅当匹配指定的字节数组时,才如何从文件末尾删除N个字节

时间:2019-05-16 06:53:44

标签: c# io

我在构建程序来处理提供的文件时遇到问题。这些文件是使用UTF-8格式化的XML文件。奇怪的是,某些文件以 export function checkDisplay(webElement) { expect(webElement.isDisplayed()).to.be.true; } var abc= element(by.css('mycss')); checkDisplay(abc) or checkDisplay(element(by.css('mycss'))) 结尾,并导致我们的XML解析器抛出错误。我希望构建一个函数来删除文件末尾的这些字节(如果存在),而无需“硬编码” 0x0A 0x00。理想情况下,此函数可在将来用于具有任何大小的数组的任何类似行为。

这里是例外:

0x0A 0x00

这发生在某些文件中,但不是全部。这种行为的根本原因尚未发现。

对不起,我没有代码示例,因为我无法远程完成任何工作:)如果可以进行某些工作,我将编辑这篇文章。

任何见识都受到赞赏!

1 个答案:

答案 0 :(得分:1)

像这样的事情应该可以解决问题,请记住,尽管它没有内置任何错误处理,但这仅仅是准系统功能:

static void TrimFile(string filePath, byte[] badBytes)
    {
        using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite))
        {
            byte[] bytes = new byte[badBytes.Length];
            file.Seek(-badBytes.Length, SeekOrigin.End);
            file.Read(bytes, 0, badBytes.Length);

            if (Enumerable.SequenceEqual(bytes, badBytes))
            {
                file.SetLength(Math.Max(0, file.Length - badBytes.Length));
            }                
        }
    }

您可以这样称呼它:

TrimFile(filePath, new byte[] { 0x0A, 0x00 });

这是我最后用0xCA 0xFE 0xFF 0xFF创建的一个测试文件(一些仓位数据)

62 75 6E 6B 20 66 69 6C 65 CA FE FF FF 
bunk fileÊþÿÿ

运行TrimFile(filePath, new byte[] { 0xCA, 0xFE, 0xFF, 0xFF });

之后
62 75 6E 6B 20 66 69 6C 65
bunk file

希望这会派上用场!