Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 程序损坏文件?_C#_.net - Fatal编程技术网

C# 程序损坏文件?

C# 程序损坏文件?,c#,.net,C#,.net,我知道这可能看起来很可笑,你会故意想破坏一个文件,但我向你保证这是有充分理由的 在我的应用程序中,有很多xml序列化正在进行。这反过来也意味着,我有很多反序列化 今天我尝试了一些灾难场景。我在序列化操作期间重置了服务器,正如预期的那样,它损坏了xml文件 问题是,试图在正确的时间“关闭”服务器以损坏文件并不是真正的最佳做法,首先是在.0001毫秒的写入时间内捕获操作,其次是服务器需要重新启动。此外,出于其他原因从服务器拔出插头也是一个坏主意 是否有一个应用程序可以有效地破坏一个文件,以便该文件可

我知道这可能看起来很可笑,你会故意想破坏一个文件,但我向你保证这是有充分理由的

在我的应用程序中,有很多xml序列化正在进行。这反过来也意味着,我有很多反序列化

今天我尝试了一些灾难场景。我在序列化操作期间重置了服务器,正如预期的那样,它损坏了xml文件

问题是,试图在正确的时间“关闭”服务器以损坏文件并不是真正的最佳做法,首先是在.0001毫秒的写入时间内捕获操作,其次是服务器需要重新启动。此外,出于其他原因从服务器拔出插头也是一个坏主意


是否有一个应用程序可以有效地破坏一个文件,以便该文件可以在我的应用程序中用于测试?

打开它,享受旋转比特的乐趣?

您是否正在尝试测试一个部分降级的文件


如果你想测试你的程序对坏数据的反应,为什么不直接使用任何随机文本文件作为输入呢?

同意十六进制编辑器选项,因为这将允许你在文件中引入非文本值,比如空值(0x00),等等。

这是后面的一种方法,也就是说,引入随机变量,看看你的应用程序是如何处理的。您可能会看到引用链接中提到的一些模糊测试框架。但在您的情况下,使用随机生成器并在这些位置插入位来破坏它同样容易。如果您有已知的案例,那么您当然可以使用现有的损坏文件

如果试图模拟中断写入,可能只需要截断表示序列化数据的字符串。如果您使用单元测试,这将特别容易,但使用记事本仍然非常可行


当然,这只是一种不好的数据,但值得注意的是,任何形式的错误XML基本上都不再是XML,大多数解析器在出现语法错误的第一个迹象时都会立即拒绝它。

有几种方法可以处理XML文件。思考一些:-不完整的XML标记(截断的XML)。-数据上的意外内容(二进制/更多文本)。 首先,我将复制一个“正确/完整”的XML文件,并手动修改它。对于第二个,我将把部分XML文件与文件系统上的任何二进制文件连接起来


十六进制编辑器对我来说似乎有点太多了;)

我强烈建议您不要对测试进行“随机字节”损坏。你不仅不知道你正在做什么样的测试状态,如果你发现了一个bug,你将很难保证下一次测试会验证修复


我的建议是以一种可预测的方式手动(或编程)损坏文件,以便您知道您正在测试什么,以及如果必须,如何重新生成测试。(当然,您可能需要多种可预测的方法来确保文件中任何位置的防腐败保护)

没有想到这一点。这可能是一种更容易“破坏文件”的方法,只需使用测试所需的名称创建一个空文件。所以我需要用腐败来测试。我强调-可能…损坏的文件可以是任何文件不能以其最初预期的方式使用的地方。例如,如果您的.exe下载中途中断,则即使前半部分数据正确,.exe也不会运行,并且被视为已损坏。因为这是xml,如果您手边没有十六进制编辑器,文本编辑器也应该可以工作。只是随机剪切和粘贴东西。想要尝试和模拟在实际写入操作中未完成时发生的相同损坏。尽可能真实。如果您使用*nix,请查看dd和“/dev/uradom”-再随机不过了-例如dd If=/dev/uradom of=/my/random/file bs=1024 count=1024->1 meg完全随机文件Linux的好解决方案,但这是基于windows的:)只是为了帮助您,提供此输入的StackOverflow方法是将其作为注释添加到另一个答案中,因为这实际上根本不是一个单独的答案。但是,仅通过注释很难获得代表。但是,当你投票支持代表农业时,很难获得代表。;)有些问题最好用随机数据测试——例如,当操作的性质导致有效输入的组合爆炸时。这不是其中之一+1.我不知道为什么会被否决。