Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2009, 21:23   #1
The Best
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 50
Печаль Ошибка при использовании copyfile

люди, подскажите пожалуйста мне коды ошибок дя этой функции, а то у меня в хелпе про ней написано только вот что: "
Цитата:
The runtime library does not provide any routines for copying a file. However, if you are writing Windows-only applications, you can directly call the Windows API CopyFile function to copy a file. Like most of the runtime library file routines, CopyFile takes a filename as a parameter, not a file handle. When copying a file, be aware that the file attributes for the existing file are copied to the new file, but the security attributes are not. CopyFile is also useful when moving files across drives because neither the RenameFile function nor the Windows API MoveFile function can rename or move files across drives. "
Весь инет облазил в поисках и везде пишут: "Ошибки этой функции хорошо в хелпе расписаны! Ищите там." Зарание спасибо.

Последний раз редактировалось Stilet; 22.07.2009 в 08:55.
The Best вне форума Ответить с цитированием
Старый 21.07.2009, 21:55   #2
bill_gates
Ненависник Windows
Пользователь
 
Аватар для bill_gates
 
Регистрация: 04.07.2009
Сообщений: 82
По умолчанию

Попробуй эту функцию:

Код:
procedure CopyFileX(file_from, file_to:string);
var
FromF, ToF: file;
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
begin
AssignFile(FromF, file_from);
Reset(FromF, 1);
AssignFile(ToF, file_to);
Rewrite(ToF, 1);
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF);
CloseFile(ToF);
end;

...

CopyFileX('C:\Boot.ini','D:\Boot.ini'); //копирование из C:\boot.ini в D:\boot.ini например
Тоже пробовал CopyFile. Тоже не получилось. с тех пор юзаю эту функцию.
if Вопрос.Возник then begin if Google.Поиск=false then begin СоздатьТопик; end; end;

if ДругойЮзер.Помог then begin НажатьНаВесы end;
bill_gates вне форума Ответить с цитированием
Старый 21.07.2009, 22:21   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

http://msdn.microsoft.com/en-us/libr...51(VS.85).aspx
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 21.07.2009, 22:39   #4
The Best
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 50
По умолчанию

А есть похожая процедура тока на удаление? А то уменя такая проблема:
deletefile('C:\project1.exe');
CopyFileX('C:\project3.exe','C:\pro ject1.exe');

При этом прога ругается: I\O Error 32 (процесс не может получить доступ к файлу, потому что он использвется другим процессом)

Квэнди, у меня некорректно отображается этот сайт. Нету полосы прокрутки. А вся инфа не влазит на страницу.

Сори, забыл про оверпостинг. А как удалить пост - не нашёл.

Последний раз редактировалось Stilet; 22.07.2009 в 08:55.
The Best вне форума Ответить с цитированием
Старый 21.07.2009, 23:05   #5
bill_gates
Ненависник Windows
Пользователь
 
Аватар для bill_gates
 
Регистрация: 04.07.2009
Сообщений: 82
По умолчанию

Цитата:
Сообщение от The Best Посмотреть сообщение
При этом прога ругается: I\O Error 32 (процесс не может получить доступ к файлу, потому что он использвется другим процессом)
а что если в начале юнита записать так:

Код:
unit Unit1;

{$I-}

interface
...
if Вопрос.Возник then begin if Google.Поиск=false then begin СоздатьТопик; end; end;

if ДругойЮзер.Помог then begin НажатьНаВесы end;
bill_gates вне форума Ответить с цитированием
Старый 21.07.2009, 23:15   #6
The Best
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 50
По умолчанию

То просто узнаю какая у меня ошибка. А мне нужно от неё избавиться.

А, ся, придумал кое что.
The Best вне форума Ответить с цитированием
Старый 21.07.2009, 23:18   #7
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Цитата:
Сообщение от The Best Посмотреть сообщение
А есть похожая процедура тока на удаление? А то у меня такая проблема:
deletefile('C:\project1.exe');
CopyFileX('C:\project3.exe','C:\pro ject1.exe');

При этом прога ругается: I\O Error 32 (процесс не может получить доступ к файлу, потому что он использоваться другим процессом)
У всё нормально и с CopyFile, только мне не понятно что вы этим хотите сделать, Для чего с начало удалять а потом копировать с одного в др?
и 'C:\project1.exe', это не в ней ли пишете этот код ?
uberchel вне форума Ответить с цитированием
Старый 21.07.2009, 23:39   #8
The Best
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 50
По умолчанию

Просто я пишу свой апдейтер. Короче, суть такая:
есть файл программы (project1) и файл новой версии программы (project2). Project1 проверяет наличие project2 и копирует её в project3, а затем запускает Project2. Project2 прверяет наличие project3 и если он есть, то заменяет им project1. Затем запускается уже новый project1.

Указанный вами участок кода принадлежит project2.
The Best вне форума Ответить с цитированием
Старый 21.07.2009, 23:44   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

CopyFile и DeleteFile отлично работают

ко второй есть нюанс(думаю понятный) что файл не должен использоватся в системе, иначе ошибка
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.07.2009, 23:45   #10
bill_gates
Ненависник Windows
Пользователь
 
Аватар для bill_gates
 
Регистрация: 04.07.2009
Сообщений: 82
По умолчанию

Цитата:
Сообщение от The Best Посмотреть сообщение
Project1 проверяет наличие project2 и копирует её в project3, а затем запускает Project2.
А ты Project1 закрываешь после запуска Project2?
if Вопрос.Возник then begin if Google.Поиск=false then begin СоздатьТопик; end; end;

if ДругойЮзер.Помог then begin НажатьНаВесы end;
bill_gates вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в использовании сегмента Miller-1981 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 10.06.2009 16:04
Ошибка List index out of bounds(0) при использовании запроса AdoQuery ArtInt БД в Delphi 14 15.04.2009 18:35
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06
Подскажите, где ошибка в использовании ControlSource... Tooree Microsoft Office Access 2 18.08.2008 20:46