Как скопировать байты из определенного смещения в файле в другой файл с определенным смещением? - PullRequest
1 голос
/ 14 апреля 2011

Хотелось бы получить наиболее эффективный способ копирования, скажем, 1 МБ из смещения в файле 1 к тому же или другому смещению в файле 2. Возможно ли, чтобы несколько потоков выполняли операции чтения и записи в одно и то же время безопасно?

Чтобы уточнить, я, конечно, хочу обработать файл-> файл, как указано. Однако я также хочу, чтобы несколько потоков читали из сетевого расположения, связанного с вводом-выводом (Интернет и т. Д.), А затем собирали их обратно в один файл локально. Если имеет больше смысла, чтобы операция записи была однопоточной, это тоже хорошо.

1 Ответ

4 голосов
/ 14 апреля 2011

Вы почти наверняка не хотите, чтобы делали это несколькими потоками - вы будете связаны с вводом-выводом, и вам не нужны служебные данные диска, ищущие повсюду.

Я бы просто сделал это в один поток:

  • Открыть файл 1 для чтения
  • Найти
  • Открыть файл 2 для записи
  • Поиск
  • Повторное копирование буфера за раз (например, 32 КБ) из одного потока в другой.

Вы можете обнаружить, что некоторые из FileOptions (например, SequentialScan для читателя) может иметь значение.

РЕДАКТИРОВАТЬ: Как отмечено в комментариях, может стоить использовать два потока - один для чтения и один для записиособенно если вы используете два отдельных диска.Тем не менее, также возможно, что операционная система автоматически выполняет предварительную выборку и т. Д., Что не поможет. конечно усложнит код.

У вас есть целевое время для этой операции?Насколько быстро выполняется реализация simple по сравнению с этим целевым временем?Я определенно не буду рисковать несколькими потоками или асинхронными операциями, пока вы не определите, сколько времени займет простой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...