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

Вниз

Разбираю копирование файлов (и по сети тоже)   Найти похожие ветки 

 
philinsul ©   (2007-09-03 08:22) [0]

Всем доброго времени суток.
Начал ковырятьсы на форуме в поиске по поводу данной темы, нашёл несколько статей, решил дальше разбираться сам и столкнулся с проблемой - не могу реализовать копирование нескольких файлов по сети себе на комп. Есть четыре компа в сети, мой пятый, на каждом есть расшаоенные папки - мне надо из этих папок копировать себе на комп опр. файлы - копирование должно происходить за один подход, то есть я запускаю прогу нажимаю кнопку и она сама копирует со всех четырёхкомпов необходимые файлы (в настройках я предварительно указываю какие файлы). Если кто знает подскажите как это сделать.


 
Palladin ©   (2007-09-03 08:44) [1]


Type
TFileCopyThread=Class(TThread)
 Protected
  m_strFile1,m_strFile2:String;
  Procedure Execute; Override;
 Public
  Constructor Create(Const p_strFileFrom,p_strFileTo:String);
End;

Procedure TFileCopyThread.Execute;
Begin
CopyFile(m_strFile1,m_strFile2,false);
End;

Constructor TFileCopyThread.Create;
Begin
Inhreited Create(True);
FreeOnTerminate:=True;
Priority:=tpLower;
Resume;
End;

Procedure ThreadCopyFile(Const p_strFileFrom,p_strFileTo:String);
Begin
TFileCopyThread.Create(p_strFileFrom,p_strFileTo);
End;

Procedure ThreadCopyFiles(p_theFilesFrom,p_theFilesTo:TStrings);
Var
i:Integer;
Begin
For i:=0 to p_theFilesFrom.Count-1 Do
 ThreadCopyFile(p_theFilesFrom[i],p_theFilesTo[i]);
End;

Procedure TForm1.Button1Click(Sender:TObject);
Begin
ThreadCopyFile("\\comp1\path1\file1","c:\file1");
ThreadCopyFiles(
  SpisokPuteyFailovSRaznyhKompovTypaTStringList,
  LocalnyjSpisokPuteyDlyaFailovSDrughKompovTypeTStringList
);
End;



можно (и нужно) добавить проверку на ошибки копирования файлов...


 
Palladin ©   (2007-09-03 08:45) [2]

ошибка в конструкторе... забыл добавить присвоение m_strFile1 и m_strFile2
сам справишься


 
philinsul ©   (2007-09-03 08:54) [3]

спасибо


 
Anatoly Podgoretsky ©   (2007-09-03 08:54) [4]

ShFileOperation


 
philinsul ©   (2007-09-03 08:56) [5]

спасибо


 
philinsul ©   (2007-09-06 13:26) [6]

У меня возник ещё один вопросец - кто нибудь может мне подробно разъяснить что делается в следующем коде (код не мой, я его с инета взял), прямо по каждой строке, а то я в программировании не силён, а разобраться хочется.

function WindowsCopyFile(FromFile, ToDir : string) : boolean;
var
 F: TShFileOpStruct;
begin
 F.Wnd := 0;
 F.wFunc := FO_COPY;
 FromFile:=FromFile+#0;
 F.pFrom:=pchar(FromFile);
 ToDir:=ToDir+#0;
 F.pTo:=pchar(ToDir);
 F.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
 result:=ShFileOperation(F) = 0;
end;


 
Anatoly Podgoretsky ©   (2007-09-06 13:35) [7]

В этом коде производится копирование из FromFile в ToDir, самая последняя строчка, все остальные установка параметров.


 
philinsul ©   (2007-09-06 13:58) [8]

Это я понял, мне интересно что это за параметры вообще, может кто даст ссылку где можно найти подобную инфу.


 
Palladin ©   (2007-09-06 14:04) [9]

delphi-faq.zoxt.net


 
Anatoly Podgoretsky ©   (2007-09-06 14:28) [10]

> Palladin  (06.09.2007 14:04:09)  [9]

MS SDK все параметры описаны, а в Инет можно найти толкование на русском языке.


 
philinsul ©   (2007-09-11 09:12) [11]

Господа программисты в очередной раз прошу о помощи.
интересует такой момент, я указывал функцию найденную на просторах инета:

function WindowsCopyFile(FromFile, ToDir : string) : boolean;
var
F: TShFileOpStruct;
begin
F.Wnd := 0;
F.wFunc := FO_COPY;
FromFile:=FromFile+#0;
F.pFrom:=pchar(FromFile);
ToDir:=ToDir+#0;
F.pTo:=pchar(ToDir);
F.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
result:=ShFileOperation(F) = 0;
end;

всем спасибо за инфу с параметрами я разобрался, но как я и предполагал возник следущий вопрос: я пытаюсь организовать копирование с 4 компов, адреса к файлам на компах находятся в LabeledEdit (4 шт.), я запихиваю адреса в TStringList и хочу чтобы функция копирования, о которой написал чуть выше копировала файлы по циклу, то есть получается что то типа этого

procedure TForm1.Button1Click(Sender: TObject);
var it: TStringList;
begin
it.Add(LabeledEdit1.Text);
it.Add(LabeledEdit2.Text);
it.Add(LabeledEdit3.Text);
it.Add(LabeledEdit4.Text);
for i:=1 to 4 do
if WindowsCopyFile(it.Names[i], LabeledEdit5.Text) then
  Process.Lines.Add("Копирование файла "+it.Names[i]+" прошло успешно")
else Process.Lines.Add("Не удалось скопировать файл "+it.Names[i]);
end;

не работает, что я делаю не так?

и второй вопрос:
есть функция выбора каталога

function PfBrowseDialog (const Title: string; const Flag,csidl: integer): string;
var
 lpItemID : PItemIDList;
 BrowseInfo : TBrowseInfo;
 DisplayName : array[0..MAX_PATH] of char;
 TempPath : array[0..MAX_PATH] of char;
begin
 Result:="";
 FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
 SHGetSpecialFolderLocation(Application.Handle,csidl,BrowseInfo.pidlRoot);
 with BrowseInfo do begin
   hwndOwner := Application.Handle;
   pszDisplayName := @DisplayName;
   lpszTitle := PChar(Title);
   ulFlags := Flag;
 end;
 lpItemID := SHBrowseForFolder(BrowseInfo);
 if lpItemId <> nil then begin
   SHGetPathFromIDList(lpItemID, TempPath);
   Result := TempPath;
   GlobalFreePtr(lpItemID);
 end;
end;

как из неё взять строку с адресом выбранного каталога?


 
Gydvin ©   (2007-09-11 09:33) [12]

Мх, а чем не подходит copyfile в цикле?

for x:=0 to stringlist.count-1 do
begin
s:=liststringi.string[x];
if fileexists(s) then
 begin
  try
   copyfile(s,liststring2.string[x]);
  except
   //сообщаем об ошибке и закругляемся
  end;
end;
end;


 
Gydvin ©   (2007-09-11 09:35) [13]

опчепятка
liststringi и liststring2 читать, как stringlist и stringlist2 соответсвенно


 
Anatoly Podgoretsky ©   (2007-09-11 09:39) [14]

> Gydvin  (11.09.2007 09:33:12)  [12]

Зачем собаки хвост по частям отрубать?


 
Gydvin ©   (2007-09-11 09:42) [15]

Не понял высказывания ((
Будьте добры пояснить


 
Palladin ©   (2007-09-11 09:46) [16]


> Gydvin ©   (11.09.07 09:42) [15]

Это значит можно сразу весь отрубить :)


 
Gydvin ©   (2007-09-11 09:52) [17]


> Это значит можно сразу весь отрубить :)

Это то как раз понятно ;) А каким боком это относится к [12] не совсем. Имеем список "откуда" и "куда" в цикле копируем.


 
Palladin ©   (2007-09-11 09:59) [18]

Ну вот по списку и отрубаем, а Анатолий отстаивает свой метод копирования, через ShFileOperation когда хвост сразу отрубается :)


 
Gydvin ©   (2007-09-11 10:08) [19]

Понятно ))


 
philinsul ©   (2007-09-11 12:54) [20]

во втором вопрос я сам разобрался, дело в моей невнимательности.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.049 c
15-1189498737
Desdechado
2007-09-11 12:18
2007.10.07
Чем искать текст в большой пачке PDF-ок?


6-1170483971
lightix
2007-02-03 09:26
2007.10.07
TidTelnet (Indy9) вешает программу


15-1189306522
Aller
2007-09-09 06:55
2007.10.07
виста + хп


1-1185306496
Dr. Andrew
2007-07-24 23:48
2007.10.07
[Warning] Crc32.pas(140): Variable InFile might not have been!


15-1189498608
PEAKTOP
2007-09-11 12:16
2007.10.07
Математическое программирование





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский