Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Копирование файла [D7]


msdn ©   (2004-07-14 12:03:00) 

Доброе утро. Вот код:
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;
эта функция для копирования файлов

вот копирование
procedure TFrame.Button1Click(Sender: TObject);
var
Dir:string;
i:integer;
begin
if SelectDirectory(Dir,[],0) then
begin
for i:=0 to length(a) do
begin
WindowsCopyFile(a[i], dir)
end;
end;
end;

Вопрос следующий. После копирования, которое происходит вполне успешно, бесконечно выдаётся ошибка "Не удаётся скопировать файл. Указано неправильное или слишком длинное имя файла. Задайте другое имя". Как подавить или исправить ошибку? Заранее благодарен.


Vetalich   (2004-07-15 02:58:00) [1]

А не проще так:

var
lpBuffer:pchar;
s_dir:string;
Begin
s_dir:=string(lpBuffer)+'C:\123.ini';  //Куда
CopyFile('D:\23435',pchar(s_dir),False);  //Откуда


И копирует и лишних слов не задаёт... :)


stone   (2004-07-14 14:35:00) [2]


> msdn   (14.07.04 12:03)  

А стандартная дельфовая функция CopyFile не спасет "отца русской демократии"?


Fay   (2004-07-14 14:29:00) [3]

(Length(a) -1) = High(a)
Так, к слову.


wicked   (2004-07-14 13:02:00) [4]


>  FromFile:=FromFile+#0; F.pFrom:=pchar(FromFile);
>  ToDir:=ToDir+#0; F.pTo:=pchar(ToDir);

вполне вероятно, что F.pFrom и F.pTo не заканчиваются на двойной NULL символ...
как вылечить - завести два массива array [0..MAX_PATH + 10] of char, сделать им ZeroMemory, и копировать переменные FromFile и ToDir в них... соответственно, их адреса (адреса нулевых элементов) передавать в F.pFrom и F.pTo...


msdn   (2004-07-14 12:42:00) [5]

ну кто-то что-то толковое по этому поводу сказать может?


msdn   (2004-07-14 12:18:00) [6]

length(a) - 1 да тут вы правы,забыл, но это не помогло.


Vitalik   (2004-07-14 12:17:00) [7]


> ЗЫ а length точно возвращает размер массива?...

Точно. К бабке не ходи :)


wicked   (2004-07-14 12:14:00) [8]

может цикл нужно оформить так:

> for i:=0 to length(a) - 1do
> begin
> WindowsCopyFile(a[i], dir)
> end;


ЗЫ а length точно возвращает размер массива?...


msdn   (2004-07-14 12:10:00) [9]

массив в котором храню кучу имён файлов, я тут подумал может это с русскими именами файлов связано?


wicked   (2004-07-14 12:06:00) [10]

что такое "a"?...


Наверх

Титульная страница Поиск, карта сайта Написать письмо