Форум: "WinAPI";
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];
ВнизКопирование файлов с помощью API Найти похожие ветки
← →
Artem20000 (2002-01-31 19:54) [0]Привет всем!!!
Вопрос. Я сначала фильтруюю файлы с помощью findfirst findnext а затем переписываю их в другую папку по заданной дате, копирую с помощью winAPI. Так вот копируются не все файлы а только один. Выдает сообщение, "Не могу найти файл, нажмите F5 чобы обновить"
В чем ДЕЛО?
← →
Tosov (2002-01-31 21:11) [1]Код покажи
← →
Artem20000 (2002-02-07 00:23) [2]Вот код
pathe:=Label4.Caption+"\"+FilterComboBox1.Mask; {Путь к файлам в каталоге }
pathe_copy:=Label4.Caption+"\";
StatusBar1.SimpleText:=pathe_copy; {строка состояния}
{---------------Поиск в каталоге--------------}
FindRes:=FindFirst(pathe, faAnyFile, Info); {Фильтрую...}
while (FindRes=0) do
begin
if (FileDateToDateTime(Info.Time)>=DateTimePicker1.Date)and(FileDateToDateTime(Info.Time)<=DateTimePicker2.Date)then
begin
pathe_copy:=pathe_copy+Info.Name; st:=st+"\"+Info.Name;
WindowsCopyFile(pathe_copy,st);
{ CopyFile(StrPCopy(x,pathe_copy),StrPCopy(y,st),long);}
{-----------------------------}
StatusBar2.SimpleText:=st+"\"+Info.Name;
StatusBar1.SimpleText:=pathe;
{-----------------------------}
FindRes:=FindNext(Info);
Continue;
end
else begin FindRes:=FindNext(Info); Continue; end;
end;
FindClose(Info);
end;
{---------Функция копирования файлов---API-----}
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;
← →
AlexRush (2002-02-07 12:34) [3]Оригинально та с файлом работаешь...
Я твой алгоритм разбирать не хочу, могу только сказать, что ты не те функции юзаешь.
Лови готовыю процедуру:
procedure CopyToMyDir(PathFrom, // Директория "откуда"
Mask, // Маска файлов
PathTo // Директория "куда"
:string);
VAR
wfd:WIN32_FIND_DATA;
hFile:DWORD;
count:DWORD; // количество наиденных файлов
flag:boolean;
ErrorMsg:array[0..MAX_PATH]of Char;// буфер сообщение об ошибке
BEGIN
if (PathFrom[Length(PathFrom)]<>"\") //
then PathFrom:=PathFrom+"\"; // проверка на наличие "\" вконце
if (PathTo[Length(PathTo)]<>"\") // имени директорий
then PathTo:=PathTo+"\"; //
count:=0;
hFile:=FindFirstFile(PChar(PathFrom+Mask),wfd);
flag:= (hFile <> Windows.INVALID_HANDLE_VALUE);
while flag do
begin
count:=count+1;
{DEBUG ==========================================================}
{DEBUG Это потом снесешь }
{DEBUG}
{DEBUG} frmMain.memo_Rprt.Lines.Add("Копирую ""+PathFrom+string(wfd.cFileName)+"" в ""+PathTo+string(wfd.cFileName)+""");
{DEBUG}
{DEBUG}
{DEBUG ==========================================================}
if not CopyFile(PChar(PathFrom+string(wfd.cFileName)),
PChar(PathTo+string(wfd.cFileName)),
false)
then{}begin// если возвращает false, выводим сообщение об ошибке
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
nil,
GetLastError,
0,
@ErrorMsg[0],
MAX_PATH,
0);
MessageBox(0,
PChar("Не удалось копировать файл"+#13+
"""+PathFrom+string(wfd.cFileName)+"""+#13+
"в файл"+#13+
"""+PathTo+string(wfd.cFileName)+"""+#13+#13+
"Ошибка: "+string(ErrorMsg)),
PChar("Копирование"),
MB_ICONERROR);
end; {}
flag:=FindNextFile(hFile,wfd);
end;
Windows.FindClose(hFile);
END;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c