![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разбираю копирование файлов (и по сети тоже) [D7, XP]
philinsul © (2007-09-03 08:22:00)Всем доброго времени суток.
Начал ковырятьсы на форуме в поиске по поводу данной темы, нашёл несколько статей, решил дальше разбираться сам и столкнулся с проблемой - не могу реализовать копирование нескольких файлов по сети себе на комп. Есть четыре компа в сети, мой пятый, на каждом есть расшаоенные папки - мне надо из этих папок копировать себе на комп опр. файлы - копирование должно происходить за один подход, то есть я запускаю прогу нажимаю кнопку и она сама копирует со всех четырёхкомпов необходимые файлы (в настройках я предварительно указываю какие файлы). Если кто знает подскажите как это сделать.
philinsul (2007-09-11 12:54:00) [1]во втором вопрос я сам разобрался, дело в моей невнимательности.
Gydvin (2007-09-11 10:08:00) [2]Понятно ))
Palladin (2007-09-11 09:59:00) [3]Ну вот по списку и отрубаем, а Анатолий отстаивает свой метод копирования, через ShFileOperation когда хвост сразу отрубается :)
Gydvin (2007-09-11 09:52:00) [4]
> Это значит можно сразу весь отрубить :)
Это то как раз понятно ;) А каким боком это относится к [12] не совсем. Имеем список "откуда" и "куда" в цикле копируем.
Palladin (2007-09-11 09:46:00) [5]
> Gydvin © (11.09.07 09:42) [15]
Это значит можно сразу весь отрубить :)
Gydvin (2007-09-11 09:42:00) [6]Не понял высказывания ((
Будьте добры пояснить
Anatoly Podgoretsky (2007-09-11 09:39:00) [7]> Gydvin (11.09.2007 09:33:12) [12]
Зачем собаки хвост по частям отрубать?
Gydvin (2007-09-11 09:35:00) [8]опчепятка
liststringi и liststring2 читать, как stringlist и stringlist2 соответсвенно
Gydvin (2007-09-11 09:33:00) [9]Мх, а чем не подходит 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;
philinsul (2007-09-11 09:12:00) [10]Господа программисты в очередной раз прошу о помощи.
интересует такой момент, я указывал функцию найденную на просторах инета:
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;
как из неё взять строку с адресом выбранного каталога?
Anatoly Podgoretsky (2007-09-06 14:28:00) [11]> Palladin (06.09.2007 14:04:09) [9]
MS SDK все параметры описаны, а в Инет можно найти толкование на русском языке.
Palladin (2007-09-06 14:04:00) [12]delphi-faq.zoxt.net
philinsul (2007-09-06 13:58:00) [13]Это я понял, мне интересно что это за параметры вообще, может кто даст ссылку где можно найти подобную инфу.
Anatoly Podgoretsky (2007-09-06 13:35:00) [14]В этом коде производится копирование из FromFile в ToDir, самая последняя строчка, все остальные установка параметров.
philinsul (2007-09-06 13:26:00) [15]У меня возник ещё один вопросец - кто нибудь может мне подробно разъяснить что делается в следующем коде (код не мой, я его с инета взял), прямо по каждой строке, а то я в программировании не силён, а разобраться хочется.
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;
philinsul (2007-09-03 08:56:00) [16]спасибо
Anatoly Podgoretsky (2007-09-03 08:54:00) [17]ShFileOperation
philinsul (2007-09-03 08:54:00) [18]спасибо
Palladin (2007-09-03 08:45:00) [19]ошибка в конструкторе... забыл добавить присвоение m_strFile1 и m_strFile2
сам справишься
Palladin (2007-09-03 08:44:00) [20]
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;
можно (и нужно) добавить проверку на ошибки копирования файлов...