Текущий архив: 2006.03.05;
Скачать: CL | DM;
Вниз
Перемещение каталогов Найти похожие ветки
← →
sally (2006-02-02 11:55) [0]Можно ли перемещать каталоги, используя стандартные процедуры перемещения файлов DeviceIoControl
← →
ZeroDivide © (2006-02-02 12:59) [1]Интересно, а как ты с помощью DeviceIoControl перемещаешь файлы?
Можно ли перемещать каталоги, используя стандартные процедуры
Вполне стандартно использовать для этого ShellAPI
procedure CopyFiles(const FromFolder: string; const ToFolder: string);
var
Fo : TSHFileOpStruct;
buffer : array[0..4096] of char;
p : pchar;
begin
FillChar(Buffer, sizeof(Buffer), #0);
p := @buffer;
StrECopy(p, PChar(FromFolder)); //директория, которую мы хотим скопировать
FillChar(Fo, sizeof(Fo), #0);
Fo.Wnd := Application.Handle;
Fo.wFunc := FO_COPY;
Fo.pFrom := @Buffer;
Fo.pTo := PChar(ToFolder); //куда будет скопирована директория
Fo.fFlags := 0;
if ((SHFileOperation(Fo) <> 0) or (Fo.fAnyOperationsAborted <> false)) then
ShowMessage("File copy process cancelled")
end;
← →
sally (2006-02-02 13:10) [2]ну как? очень даже просто...
Я их перемещаю не логически, а физически. Может я не корректно выразился.
А вообще-то
DeviceIoControl(DiskHandle, FSCTL_MOVE_FILE, @MoveParams, sizeof(MoveParams), nil, 0, w, nil);
ну соответственно
MOVE_FILE_DATA = record
FileHandle: HWND;
StartingVcn: LONGLONG;
StartingLcn: LONGLONG;
ClusterCount: DWORD;
end;
MoveParams: MOVE_FILE_DATA;
ShellAPI перемещает файлы логически...
← →
ZeroDivide © (2006-02-02 13:25) [3]DeviceIoControl, FSCTL_MOVE_FILE используется только для дефрагментации и то только под w2k и выше :)
И перемещает собственно не файлы а кластеры
the granularity of the move is 16 clusters; otherwise, the granularity is one cluster
... и причем в пределах одного тома.
← →
sally (2006-02-02 14:05) [4]вопрос то был:
Можно ли перемещать каталоги, используя DeviceIoControl
Он вроде как их не перемещает...
← →
sally (2006-02-02 14:11) [5]Да, а чем пльзуются для дефрагментации WIn98?
← →
Игорь Шевченко © (2006-02-02 14:14) [6]
> Можно ли перемещать каталоги, используя DeviceIoControl
Каталог - это тоже файл
← →
sally (2006-02-02 14:18) [7]>Игорь Шевченко
Трудно спорить, но если файлы(кластеры "под" файлом) перемещаются, то "директории" не хотят...
← →
Игорь Шевченко © (2006-02-02 14:22) [8]sally (02.02.06 14:18) [7]
А что говорят, когда не хотят ?
← →
sally (2006-02-02 14:26) [9]параметр задан неверно ...
← →
sally (2006-02-02 15:23) [10]Чем пользоваться какими процедурами для дефрагментации Win98.
← →
Игорь Шевченко © (2006-02-02 15:32) [11]
> Чем пользоваться какими процедурами для дефрагментации Win98.
Norton Utilities ?
> MOVE_FILE_DATA = record
> FileHandle: HWND;
> StartingVcn: LONGLONG;
> StartingLcn: LONGLONG;
> ClusterCount: DWORD;
> end;
> MoveParams: MOVE_FILE_DATA;
А вот на SysInternals
http://www.sysinternals.com/Information/DiskDefragmenting.html
почему-то другое определение
typedef struct {
HANDLE FileHandle;
ULONG Reserved;
LARGE_INTEGER StartVcn;
LARGE_INTEGER TargetLcn;
ULONG NumVcns;
ULONG Reserved1;
} MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
Может ты параметр неверный передаешь ?
← →
sally (2006-02-02 15:35) [12]Да странно....
Я из MSDN взял...
Попробую с этим вариантом. Спасибо.
Нортон утилиты конечно класс, но нужно иметь возможность перемещать кластера в Win98.
← →
ZeroDivide © (2006-02-02 15:39) [13]
FSCTL_MOVE_FILE
...
Requires Windows Vista, Windows XP, or Windows 2000 Professional.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/fsctl_move_file.asp
← →
sally (2006-02-02 15:41) [14]т.е. стандартными вещами нельзя переместиь что ли? Надо писать свой драйвер?
← →
Игорь Шевченко © (2006-02-02 15:43) [15]
> Я из MSDN взял...
Очень сильно сомневаюсь, что в MSDN написано:
> FileHandle: HWND;
← →
sally (2006-02-02 15:52) [16]>Игорь Шевченко
А по существу можно? Вы MSDN открывали? Зайдите по этой ссылке, посмотрите и скажите, где я не прав?
Или THandle и HWND это не одно и тоже и в этом кроется проблема?
← →
Игорь Шевченко © (2006-02-02 15:58) [17]sally (02.02.06 15:52) [16]
А по существу я целую ссылку на статью дал. С картинками.
← →
Fay © (2006-02-02 16:09) [18]>> Вы MSDN открывали?
LOL 8))
← →
sally (2006-02-02 16:47) [19]>Игорь Шевченко
Не помогла и та структура.
Но если вдруг кому интересно, на http://www.sysinternals.com/Information/DiskDefragmenting.html написано, что
because of the way the FSCTL_MOVE_FILE routine is written, it is only possible to reallocate file data clusters, and not directories or other file metadata
В MSDN ничего об этом нет.
Так что директории(кластера под директориями) переместить не удасться.
Вопрос о перемещении кластеров под Win98 остантся открытым.
Страницы: 1 вся ветка
Текущий архив: 2006.03.05;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.011 c