Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перемещение каталогов


sally ©   (2006-02-02 11:55:00) 

Можно ли перемещать каталоги, используя стандартные процедуры перемещения файлов DeviceIoControl


sally   (2006-02-02 16:47:00) [1]

>Игорь Шевченко
Не помогла и та структура.

Но если вдруг кому интересно, на 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 остантся открытым.


Fay   (2006-02-02 16:09:00) [2]

>> Вы MSDN открывали?
LOL 8))


Игорь Шевченко   (2006-02-02 15:58:00) [3]

sally   (02.02.06 15:52) [16]

А по существу я целую ссылку на статью дал. С картинками.


sally   (2006-02-02 15:52:00) [4]

>Игорь Шевченко
А по существу можно? Вы MSDN открывали? Зайдите по этой ссылке, посмотрите и скажите, где я не прав?
Или THandle и HWND это не одно и тоже и в этом кроется проблема?


Игорь Шевченко   (2006-02-02 15:43:00) [5]


> Я из MSDN взял...


Очень сильно сомневаюсь, что в MSDN написано:


> FileHandle: HWND;


sally   (2006-02-02 15:41:00) [6]

т.е. стандартными вещами нельзя переместиь что ли? Надо писать свой драйвер?


ZeroDivide   (2006-02-02 15:39:00) [7]


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:35:00) [8]

Да странно....
Я из MSDN взял...
Попробую с этим вариантом. Спасибо.

Нортон  утилиты конечно класс, но нужно иметь возможность перемещать кластера в Win98.


Игорь Шевченко   (2006-02-02 15:32:00) [9]


> Чем пользоваться какими процедурами для дефрагментации 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:23:00) [10]

Чем пользоваться какими процедурами для дефрагментации Win98.


sally   (2006-02-02 14:26:00) [11]

параметр задан неверно ...


Игорь Шевченко   (2006-02-02 14:22:00) [12]

sally   (02.02.06 14:18) [7]

А что говорят, когда не хотят ?


sally   (2006-02-02 14:18:00) [13]

>Игорь Шевченко
Трудно спорить, но если файлы(кластеры "под" файлом) перемещаются, то "директории" не хотят...


Игорь Шевченко   (2006-02-02 14:14:00) [14]


> Можно ли перемещать каталоги, используя DeviceIoControl


Каталог - это тоже файл


sally   (2006-02-02 14:11:00) [15]

Да, а чем пльзуются для дефрагментации WIn98?


sally   (2006-02-02 14:05:00) [16]

вопрос то был:
Можно ли перемещать каталоги, используя DeviceIoControl

Он вроде как их не перемещает...


ZeroDivide   (2006-02-02 13:25:00) [17]

DeviceIoControl, FSCTL_MOVE_FILE используется только для дефрагментации и то только под w2k и выше :)

И перемещает собственно не файлы а кластеры
the granularity of the move is 16 clusters; otherwise, the granularity is one cluster

... и причем в пределах одного тома.


sally   (2006-02-02 13:10:00) [18]

ну как? очень даже просто...
Я их перемещаю не логически, а физически. Может я не корректно выразился.
А вообще-то
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 12:59:00) [19]

Интересно, а как ты с помощью 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо