8.14.8
15.04.2022
JS: 2.14.23
CSS: 4.9.13
jQuery: 3.6.0
DataForLocalStorage: 2022-05-26 15:46:14-standard
Программирование Компьютеры
Создание программ на языках Pascal, Delphi и Lazarus.
number, j, a - глобальные. На FTP: function TfrmMain.UpDir (dir : string) : string; Var i : integer; begin for i := length (dir) downto 0 do if dir[i] = '/' then begin Delete(dir, i, length (dir) ); Break; end; UpDir := dir; end; function TfrmMain.DirList_loc (dir : string) : TSTrings; var sr: TSearchRec; list : TStrings; begin list := TStringList.Create; list.Clear; if FindFirst(dir + '\*.*', faAnyFile, sr) = 0 then begin repeat if (sr.Name <> '.') AND (sr.Name <> '..') then list.Add(sr.Name); until FindNext(sr) <> 0; FindClose(sr); end; DirList_loc := list; end; procedure TfrmMain.LOC_TO_S_CopyDir (from_dir, to_dir: String); var dir : TStrings; i : integer; begin dir := TStringList.Create; dir.Clear; dir := DirList_loc (from_dir); FTP.MakeDir (to_dir); for i := 0 to dir.Count - 1 do If GetFileAttributes(PChar(from_dir + '\' + dir[i])) <> FILE_ATTRIBUTE_DIRECTORY then FTP.Put(from_dir + '/' + dir[i], to_dir + '/' + dir[i] ) else begin cats.Add(from_dir + '\' + dir[i]); s_c.Add(to_dir + '/' + dir[i]); end; while j < cats.Count do begin inc (j); if a=true then begin a:=false; number := cats.Count; end else begin from_dir := UpDir (from_dir); to_dir := UpDir (to_dir); if j=number then a:=true; end; LOC_TO_S_CopyDir(cats[j-1], s_c[j-1]); end; end;
На компьютер: function TfrmMain.ShortDir (dir : string) : string; Var i : integer; begin for i := length (dir) downto 0 do if dir[i] = '\' then begin dir := Copy(dir, i+1, length (dir) ); Break; end; ShortDir := dir; end; function TfrmMain.DelDir(dir: string): Boolean; var fos: TSHFileOpStruct; begin ZeroMemory(@fos, SizeOf(fos)); with fos do begin wFunc := FO_DELETE; fFlags := FOF_SILENT or FOF_NOCONFIRMATION; pFrom := PChar(dir + #0); end; Result := ((0 = ShFileOperation(fos)) AND removedir(dir)); end; procedure TfrmMain.S_TO_LOC_CopyDir(from_dir, to_dir: String); var dir : TStrings; i : integer; begin dir := TStringList.Create; dir.Clear; dir := DirList (from_dir); if DirectoryExists(to_dir) = True then DelDir (to_dir); mkdir (to_dir); for i := 0 to dir.Count - 1 do if (FTP.Size(from_dir + '/' + dir[i]) <> -1) then FTP.Get(from_dir + '/' + dir[i], to_dir + '/' + dir[i], False , FTP.CanResume ) else begin cats.Add(from_dir + '/' + dir[i]); s_c.Add(to_dir + '/' + dir[i]); end; while j < cats.Count do begin inc (j); if a=true then begin a:=false; number := cats.Count; end else begin from_dir := UpDir (from_dir); to_dir := UpDir (to_dir); if j=number then a:=true; end; S_TO_LOC_CopyDir(cats[j-1], s_c[j-1]); end; end;
Алексеев Владимир НиколаевичМастер-Эксперт ID: 259041 |
= общий =
27.02.2022, 12:01
А Вам надо обязательно использовать Среду разработки Delphi 7 ?
Я уже более 10 лет успешно копирую файлы и папки с помощью простейших VBScript , в тч по локальной сети одноранговой, без всяких сред разработки. Преимущество VBScript в том, что если например я в гостях установил кому-то ОперСистему, где нет и не будет среды разработки, и если что-то пошло не по заранее-написанному сценарию, то я просто открываю скрипт в Блокноте (Блокнот есть в любой Windows), вношу поправку, и скрипт мигом готов к работе (без к-либо компиляции). |
ВладимирПосетитель ID: 352040 |
= общий =
27.02.2022, 12:33
Добрый день. Да, использование именно Delphi обязательно. У меня много чего уже реализовано в программе. И тут возникла необходимость добавить работу с FTP. Как я писал выше копирование/перемещение отдельных файлов реализовать не сложно, а вот с каталогами возникла проблема. Как говорится, не ищем легких путей. =====
Пользуюсь Delphi Enterprise Version7. |
Алексеев Владимир НиколаевичМастер-Эксперт ID: 259041 |
= общий =
27.02.2022, 15:35
Помочь Вам в Delphi я не могу. Когда и если Вам надоест возня с компиляторами, приходите в раздел VBScript , будем обмениваться опытом
![]() В VBScript операции FSO.CopyFile и FSO.CopyFolder очень похожи, я думаю, что и у Вас в Delphi Вы найдёте сходство. А для облегчения решения проблемы я советую Вам разделить сложную затею на 3 простых этапа: 1)Сначала освойте копирование/перемещение каталогов в пределах одного диск-раздела. 2)Затем потренируйтесь копировать/перемещать каталоги на другой диск-раздел без комп-сети. 3)Затем используйте полученный опыт для копи/перемещения ч-з комп-сеть. Возможно, придётся настроить ограничения (админ-права на импорт папки в сетевой ресурс). А может удастся сначала создать папку-получатель, а затем наполнить её под-папками и файлами. |
ВладимирПосетитель ID: 352040 |
= общий =
27.02.2022, 16:05
Разберемся. Думаю победим. Выход есть в любой ситуации. Тем не менее спасибо за внимание. =====
Пользуюсь Delphi Enterprise Version7. |
Зенченко Константин НиколаевичСтарший модератор ID: 31795 |
= общий =
28.02.2022, 15:53
=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать. ![]() |
ВладимирПосетитель ID: 352040 |
= общий =
01.03.2022, 14:27
Да смотрел. Если использовать Код IdFTP1.Put(f2, f1, false); IdFTP1.Get(f2, f1,true); Копируются отдельные файлы, это работает. А если там не отдельный файл а папка да еще с вложениями, не хочет. Вот и возник вопрос. Либо я чего то не понял. Первый раз работаю с FTP. Много ответов отыскал в сети, а вот тут споткнулся. =====
Пользуюсь Delphi Enterprise Version7. |