如何将文件中特定偏移量的字节复制到特定偏移量的另一个文件?

时间:2011-04-14 17:38:07

标签: c# file-io

想要从文件1中的偏移量复制(例如)1MB到文件2中相同或不同偏移量的最有效方式。是否可以安全地让多个线程同时执行读取和写入操作?

为了澄清,我当然希望按照规定处理file->文件。但是,我还希望从网络IO绑定位置(Internet等等)读取多个线程,然后将这些线程重新组装回本地的单个文件中。如果更有意义的是写操作是单线程的,那也很好。

1 个答案:

答案 0 :(得分:4)

你几乎肯定不会想要多个线程这样做 - 你将受到IO限制,并且你不希望磁盘的开销在整个地方寻找。< / p>

我只是在一个帖子中做到了:

  • 打开文件1进行阅读
  • 打开文件2进行写作
  • 一次(例如32K)将缓冲区从一个流重复复制到另一个流。

您可能会发现某些FileOptions(例如读者的SequentialScan)可能会有所作为。

编辑:正如评论中所述,可能值得使用两个线程 - 一个用于读取,一个用于写入,特别是如果您使用两个独立的驱动器。但是,可能会在操作系统自动执行预取等操作时出现这种情况,这样做无济于事。它会肯定使代码复杂化。

您是否有此操作的目标时间?与目标时间相比,简单实施的速度有多快?在你确定简单方法需要多长时间之前,我肯定不会冒险进入多线程或异步操作。