Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/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#_File - Fatal编程技术网

C# 调查结果;“空的”;文件中的部分

C# 调查结果;“空的”;文件中的部分,c#,file,C#,File,编辑1: 我构建了一个torrent应用程序;同时从不同的客户端下载。每个下载代表我的文件的一部分,不同的客户端有不同的部分。 下载完成后,我需要通过在我的文件中查找“空”部分来知道我现在需要完成的部分 创建固定大小文件的一种方法: File.WriteAllBytes(@"C:\upload\BigFile.rar", new byte[Big Size]); BitArray TorrentPartsState = new BitArray(10); 将我的文件表示为部分的我的部分Ar

编辑1:

我构建了一个torrent应用程序;同时从不同的客户端下载。每个下载代表我的文件的一部分,不同的客户端有不同的部分。 下载完成后,我需要通过在我的文件中查找“空”部分来知道我现在需要完成的部分

创建固定大小文件的一种方法:

File.WriteAllBytes(@"C:\upload\BigFile.rar", new byte[Big  Size]);
BitArray TorrentPartsState = new BitArray(10);
将我的文件表示为部分的我的部分Arr:

File.WriteAllBytes(@"C:\upload\BigFile.rar", new byte[Big  Size]);
BitArray TorrentPartsState = new BitArray(10);
例如:

File.WriteAllBytes(@"C:\upload\BigFile.rar", new byte[Big  Size]);
BitArray TorrentPartsState = new BitArray(10);
文件大小为100

  TorrentPartsState[0] = true; // thats mean that in my file, from position 0 until 9 I **dont** need to fill in some information.
  TorrentPartsState[1] = true; // thats mean that in my file, from position 10 until 19 I **need** to fill in some information.
我找到了一种有效的方法来保存BitArray包含的内容,即使计算机/应用程序已关闭。我想到的一种方法是通过xml文件,并在每次完成一部分时更新它

我认为这不是一个明智而有效的解决方案。有其他的想法吗?

在你的文件中实现一个文件系统(比如在磁盘上)——只需使用一些简单的,应该是FOS竞技场上可用的东西,你可以使用一个(in-system.Collections)

然后,当访问文件中的偏移量时,可以将该偏移量处的位数组设置为true

因此,对于10000字节的文件:

BitArray ba = new BitArray(10000);

// Visited offset, mark in the BitArray            
ba[4] = true;

当您开始转账时,您似乎知道以下几点:

  • 最终文件的大小
  • 要用于文件的流的(最大)数目
  • 创建输出文件并分配所需的空间

    使用相关文件名创建第二个“控制”文件,例如添加您自己的扩展名。在该文件中,维护与网络流相对应的流状态结构数组。每个状态由起始偏移量和传输的字节数组成。定期刷新流缓冲区,然后更新控制文件以反映已完成和提交的进度

    主题变化:

    • 控制文件可以定义要传输的段,例如16MB块,并由寻找不完整段的线程和从中检索该段的合适服务器将其视为工作队列
    • 控制文件可以是结果文件中的一个单独分支。(我在跟谁开玩笑?)

    你为什么要这样做?也许有一个更简单的方法来实现这个目标。你在文件中写入了什么数据,是文本、二进制还是其他?请在创建固定大小文件的地方发布一些代码。您应该提供更多详细信息。你说空是什么意思?xml的用途是什么?真是个令人困惑的问题。是否有任何模式在有效数据中永远不会出现,例如0xDEADBEEF?@user92546这是一个很好的问题,这正是我试图找到的。我想填写为-1,但我不能。顺便问一下,什么是0xDEADBEEF?0xDEADBEEF是古代十六进制调试器和内存转储中使用的许多易于识别的模式之一。未使用的内存被填满,分配的内存块周围的保护带也被填满。现在很容易施放一个可靠的六角形,不再使用了。太棒了。可能也应该实现日志记录。不,那太过分了(顺便说一句,你知道有一些非常简单的FS是对的/)什么是FOS?请详细解释您的解决方案。谢谢。我很抱歉,但我不明白你的解决办法。你能编辑你的答案并解释更多细节吗?我很抱歉,这里没有最大流量,但你的想法很好。我会去的,我会更新,以防它的工作;)再次谢谢你。