Форум: "Начинающим";
Текущий архив: 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