Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Вниз

Копирование файла   Найти похожие ветки 

 
msdn   (2004-07-14 12:03) [0]

Доброе утро. Вот код:
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;

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


 
wicked ©   (2004-07-14 12:06) [1]

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


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

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


 
wicked ©   (2004-07-14 12:14) [3]

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

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


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


 
Vitalik ©   (2004-07-14 12:17) [4]


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

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


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

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


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

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


 
wicked ©   (2004-07-14 13:02) [7]


>  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...


 
Fay ©   (2004-07-14 14:29) [8]

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


 
stone ©   (2004-07-14 14:35) [9]


> msdn   (14.07.04 12:03)  

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


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

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

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


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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.037 c
1-1089874924
Семенов
2004-07-15 11:02
2004.08.01
Как определить загружена программа или нет?


3-1089195030
sniknik
2004-07-07 14:10
2004.08.01
Не запускается сервис базы (оракле)


1-1090326277
ИМХО
2004-07-20 16:24
2004.08.01
Большой текстовый файл


1-1090256579
Aleksandr.
2004-07-19 21:02
2004.08.01
Не могу главное окно убрать из TaskBar a при запуске!


14-1089616282
Сергей Стоянов
2004-07-12 11:11
2004.08.01
Разработка компьютерной системы для частной клиники





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский