Отказ от ответственности: Я сразу признаю, что у меня есть достаточное количество незнания относительно деталей того, как функционируют файловые системы.Я так долго пользуюсь NTFS, что могу экстраполировать происходящее, основываясь на поведении, которое я засвидетельствовал, а также на том, что я узнал, придя в интернет, - однако ...
Я надеялся, чтоесть способ определить, нужно ли при перемещении файла из «местоположения A» в «местоположение B» выполнять операцию, эквивалентную «File.Copy -> File.Delete», или не будет копировать фактические данные файла, но просто обновите расположение в «таблице основных файлов» и т. п.
Для различных целей я иногда перемещаю большое количество больших файлов.Мне нравится сообщать о прогрессе в пользовательском интерфейсе.
Я понимаю, что когда я вызываю File.Move и перемещаю файл из места на одном диске / разделе в другое, функция фактически должна будет «копировать данные файла -> удалить» между дисками / разделами,Когда он сталкивается с такой ситуацией, я хочу быть в состоянии обнаружить, что это произойдет, поэтому я могу использовать созданный мной код, который будет копировать файл и давать подробные отчеты о ходе выполнения при передаче байтов, чтобы я мог часто обновлять индикаторы выполнения в пользовательском интерфейсе.
Когда он находится на том же диске / разделе, поскольку обновление местоположения в таблице основных файлов происходит очень быстро, я просто обновляю индикатор выполнения, когда функция file.Move завершается для каждого файла, который я перемещаю пакетно.
Используя .NET 4 (C #), можно ли с помощью других средств определить, потребует ли вызов File.Move эквивалентную операцию «копировать -> удалить», или просто обновит таблицу файлов, а не скопируетданные файла?
Редактировать:
Как я отмечаю в комментариях ниже, возможности того, как я думал, что это могло бы быть сделано, заключались бы в обнаружении, еслизаданное местоположение исходного файла и местоположение файла назначения расположены на одном физическом диске и разделе, и если это так, будет ли это означать, что я мог бы точно предвидеть поведение и решать, какие функции вызывать - встроенную функцию File.Move для 'nearмгновенное обновление таблицы файловой системы, которое, как мне кажется, происходит при переходе на тот же диск / часть, или мой более подробный отчет о прогрессе каждые 'x' байтовПользовательский код копирования файла.Скорость передачи файлов может сильно различаться на компьютерах, на которых будут выполняться мои программы, поэтому я хотел бы иметь возможность сообщать подробные сведения о ходе выполнения / текущей скорости передачи, когда это возможно.
Примечание. Программа может использовать сетевые UNC-пути, которые могут бытьиспользование разных физических дисков с одним и тем же корневым путем, например: \\ somename \ shares \ workfolder \ project может находиться на другом физическом диске, чем \\ somename \ shares \ workfoldder \ otherproject.Поэтому мне потребуется метод определения идентификатора раздела или идентификатора физического диска, чтобы определить, находятся ли исходная и целевая папки на одном диске / разделе.
Спасибо