Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];

Вниз

Перемещение каталогов   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.015 c
15-1139677592
scorp123
2006-02-11 20:06
2006.03.05
Установка DSPac


1-1138959745
-=Fes=-
2006-02-03 12:42
2006.03.05
FileExists в Delphi 2005


2-1140275349
Чародей
2006-02-18 18:09
2006.03.05
DynArray in procedure


2-1139866954
AllDer
2006-02-14 00:42
2006.03.05
указатели


3-1134642131
softmaster
2005-12-15 13:22
2006.03.05
Вопрос по хранимой процедуре и BDE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский