Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.07;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
15-1189200756
Petr V. Abramov
2007-09-08 01:32
2007.10.07
славные 90-е РФ


2-1189324643
Dmitriy_
2007-09-09 11:57
2007.10.07
Как открыть сайт не во вкладке, а в новом окне IE?


2-1189436199
leonidus
2007-09-10 18:56
2007.10.07
Определение высоты текста в RichEdit


2-1189491949
Washington
2007-09-11 10:25
2007.10.07
Изменение размеров формы


3-1180523664
DVM
2007-05-30 15:14
2007.10.07
Никак не могу понять, где ошибка в INSERT INTO