2016-10-06 2 views
0

Я пытаюсь объединить два очень больших файла (возможно, несколько ГБ). Мне не нужно сохранять исходный контент, меня интересует только результат.FileStream move вместо копии

Я видел, что наиболее эффективным способом добавления одного файла в другой является использование FileStream.CopyTo().

Однако, как вы все знаете, операция перемещения намного дешевле, чем копия. Если бы я хотел переместить файлы вокруг файловой системы, я бы использовал File.Move, а не File.Copy.

Есть ли эквивалент файловых потоков? Или любым другим способом, окружающим файл? Я также могу использовать методы не C#.

+0

Но вы не можете удалить файл потоковым способом (байт by byte), так что же должен делать этот шаг? – Evk

ответ

3

No.

Операция перемещения файловой системы только изменяет путь к файлу - вот что делает это быстро. Аналога нет, когда вы пытаетесь объединить два файла, независимо от того, как.

Лучшее, что вы можете сделать, это добавить содержимое второго файла в первый файл - по крайней мере, вы избежите копирования первого файла. Это то, что делает FileStream.CopyTo (не забудьте сначала найти в конце первого файла).

1

«Файлы» в файловой системе представляют собой концепции более высокого уровня, чем потоки. Много вещей происходит «под капотом», которые вы не понимаете, чтобы оптимизировать производительность и т. Д., Когда вы выполняете файловые операции в файловой системе.

Файловые потоки, с другой стороны, представляют собой концепцию программирования, которая дает вам возможность работать с файлами гораздо более гранулированным способом. Вы не можете просто «переместить» поток файлов в другой поток файлов; «Перемещение» - это иллюзия, созданная операционной системой, которая, как указал Луаан, - это просто ОС, просто изменяющая указатель на файл, а не сбор файла и перемещение его в другое место на диске.

Если вы думаете об этом, как это могло бы даже на самом деле работать? Файл представляет собой серию единиц и нулей, хранящихся в некотором статическом носителе (например, на диске). Вы не можете одновременно уничтожить те и нули, где находится файл, и записать их в новое место. Вы должны сначала скопировать те и нули в новое место, а затем удалить их в своем прежнем месте. Если бы ОС действительно делала это так (вместо вышеупомянутого метода указателя), это бы абстрагировало операцию, так что казался пользователю, что файл просто подбирался и перемещался куда-то еще за один шаг.

+0

Ну, если у вас есть файлы с выравниванием файловой системы, вы можете теоретически относиться к файлу как фрагментированный файл, составленный из частей обоих. Но нет. Только не надо. Нет. – Luaan

+0

Yuck ..........! –