|
|
|
|
Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
… (продолжение следует) …
Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки бан.
Мат в разделе — бан на три месяца…

Код ошибки при копировании файла — 3
, Delphi (чайник)
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
|
|
Здрасте!
var copyringDirSrName,copySaveDir:string; begin copyingDirSrName:=’F:1.bmp’; copySaveDir:=’C:’; if (copyFile(pChar(copyringDirSrName),pChar(copySaveDir),true)) then begin showMessage(‘OK!FileCopy!’); end else begin showMessage(‘NO!File Not Copy!Код ошибки =’+inttostr(getlasterror)); end; end; выдает сообщение Цитата NO!File Not Copy!Код ошибки = 3
Я немогу найти код ошибки =3.Не подскажите,что это значит. |
volvo877 |
|
|
Цитата uborshik @ 03.08.07, 15:23 Я немогу найти код ошибки =3
Здесь смотрел: Цитата uborshik @ 03.08.07, 15:23 я чувствую,что делаю,что-то не так.
… copySaveDir:=’C:1.bmp’; … чувствуешь разницу? |
uborshik |
|
|
Цитата volvo877 @ 03.08.07, 15:27 чувствуешь разницу?
Гм… |
|
P.O.D |
|
|
Цитата uborshik @ 03.08.07, 15:23 Я немогу найти код ошибки =3.Не подскажите,что это значит.
ShowMessage(‘NO!File Not Copy! ‘+SysErrorMessage(GetLastError));
|
uborshik |
|
|
P.O.D,volvo877 Сообщение отредактировано: uborshik — 03.08.07, 20:00 |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,0269 ] [ 16 queries used ] [ Generated: 28.01.23, 17:35 GMT ]
Hello I am using the CopyFile function in Delphi 5. But the file is not getting copied to destination. I am not able to see error also. What is the best way to know why CopyFile is failing?
if CopyFile(source, dest, false) then
ShowMessage('Success')
else
ShowMessage('Error');
I am getting displayed error always. 🙁
Jerry Dodge
26.7k29 gold badges154 silver badges318 bronze badges
asked Aug 9, 2012 at 19:12
7
If the function fails you can get extended error information, calling the GetLastError method or use the RaiseLastOSError method.
Check this sample
try
If copyFile(source , dest,false) then
ShowMessage('Success')
else
RaiseLastOSError;
except on E: Exception do
showMessage(Format('Error executing copyFile %s',[E.Message]));
end;
answered Aug 9, 2012 at 19:19
![]()
RRUZRRUZ
134k19 gold badges355 silver badges482 bronze badges
6
|
olegSher 0 / 0 / 0 Регистрация: 23.11.2013 Сообщений: 5 |
||||
|
1 |
||||
Не работает копирование файла23.11.2013, 16:01. Показов 3333. Ответов 13 Метки нет (Все метки)
Здравствуйте Delphi программист но нужно разобраться почему копирование файла
не работает для Добавлено через 41 минуту
__________________
0 |
|
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
23.11.2013, 16:01 |
|
13 |
|
3921 / 2839 / 660 Регистрация: 08.06.2007 Сообщений: 9,618 Записей в блоге: 4 |
|
|
23.11.2013, 16:51 |
2 |
|
Русские буквы в пути?
0 |
|
0 / 0 / 0 Регистрация: 23.11.2013 Сообщений: 5 |
|
|
25.11.2013, 12:34 [ТС] |
3 |
|
да есть
0 |
|
3921 / 2839 / 660 Регистрация: 08.06.2007 Сообщений: 9,618 Записей в блоге: 4 |
|
|
25.11.2013, 14:07 |
4 |
|
А разве путь у вас был в utf8 ? Вы же его берете из контрола VCL. Проверьте еще раз, что вы фактически передаете функции.
0 |
|
droider
4880 / 2753 / 848 Регистрация: 04.10.2012 Сообщений: 10,037 |
||||
|
25.11.2013, 14:12 |
5 |
|||
|
да есть В этом случае можно копировать так
в названии путей использована кириллица
0 |
|
0 / 0 / 0 Регистрация: 09.10.2015 Сообщений: 19 |
|
|
10.05.2016, 15:48 |
6 |
|
Это для (в) Delphi10
0 |
|
jsr1 6 / 6 / 2 Регистрация: 25.03.2015 Сообщений: 73 |
||||
|
10.05.2016, 16:33 |
7 |
|||
1 |
|
4880 / 2753 / 848 Регистрация: 04.10.2012 Сообщений: 10,037 |
|
|
11.05.2016, 08:45 |
8 |
|
Это для (в) Delphi10 и что? Для древних версий тоже есть функция CopyFile().
0 |
|
0 / 0 / 0 Регистрация: 09.10.2015 Сообщений: 19 |
|
|
11.05.2016, 23:13 |
9 |
|
и что? Для древних версий тоже есть функция CopyFile(). Путь к файлу — одна строка, а если путь содержит, ну например, имя таблицы, то CopyFile() уже не работает. Типа
0 |
|
BOGG ART |
|
11.05.2016, 23:16
|
|
Не по теме: Зачем вы подняли тему 2013 года? Какие ещё таблицы?
0 |
|
0 / 0 / 0 Регистрация: 09.10.2015 Сообщений: 19 |
|
|
11.05.2016, 23:24 |
11 |
|
Не по теме: Зачем вы подняли тему 2013 года? Какие ещё таблицы? Удалите, пожалуйста мой комментарий.
0 |
|
droider
4880 / 2753 / 848 Регистрация: 04.10.2012 Сообщений: 10,037 |
||||
|
12.05.2016, 10:54 |
12 |
|||
|
Буду искать дальше Зачем? Если бы Вы изначально корректно сформулировали вопрос, проблем не было.
Путь к файлу — одна строка, а если путь содержит, ну например, имя таблицы, то CopyFile() уже не работает Вы динамически в пути для копирования ссылаетесь на таблицу из БД, так?
P.S. Об этой «особенности» упомянуто в примерах по ссылке, которую я дал выше (если Вы ее смотрели внимательно) // Путь к исходному файлу задается в поле Edit. CopyFile(PChar(edt1.Text), ‘newfile.txt’, false); Добавлено через 1 минуту
1 |
|
AStavr 0 / 0 / 0 Регистрация: 09.10.2015 Сообщений: 19 |
||||
|
12.05.2016, 22:36 |
13 |
|||
|
Зачем? Если бы Вы изначально корректно сформулировали вопрос, проблем не было. Вы динамически в пути для копирования ссылаетесь на таблицу из БД, так?
P.S. Об этой «особенности» упомянуто в примерах по ссылке, которую я дал выше (если Вы ее смотрели внимательно) Добавлено через 1 минуту Да…, была ошибка в:
0 |
|
пофигист широкого профиля 4599 / 3059 / 850 Регистрация: 15.07.2013 Сообщений: 17,624 |
|
|
13.05.2016, 00:40 |
14 |
|
Да…, была ошибка в: Тогда учтите ещё одно. В приведенном вами примере первый параметр функции CopyFile, а именно
1 |
Обновлено: 01 декабря, 2018
Основная информация
В Delphi есть функция CopyFile. Вот ее описание из хелпа:
BOOL CopyFile( LPCTSTR lpExistingFileName, // pointer to name of an existing file LPCTSTR lpNewFileName, // pointer to filename to copy to BOOL bFailIfExists // flag for operation if file exists );
Параметры передаваемые в эту функцию:
- Указатель на имя существующего файла (нуль терминированная строка т.е. тип PChar!)
- Указатель на имя файла, который будет создан/перезаписан после копирования (нуль терминированная строка т.е. тип PChar!)
- Если этот параметр True и файл с таким именем уже существует, то функция вернет False. Если же файл, с именем указанным во втором параметре существует и в качестве третьего параметра передан False — то функция перезапишет файл и благополучно завершится.
Приведу небольшой пример использования этой функции. Создайте на диске C: файл ’1.txt’, а на форму поставьте кнопку:
procedure TForm1.Button1Click(Sender: TObject);
begin
if CopyFile('c:1.txt','c:2.txt',true) then
ShowMessage('Файл успешно скопирован!')
else ShowMessage('Неудача!');
end;
Для того, чтобы точнее узнать при возникновении ошибки, что же все таки произошло, надо воспользоваться функцией GetLastError0, которая возвращает код последней ошибки (формат DWORD). Теперь мы немного изменим пример:
procedure TForm1.Button1Click(Sender: TObject);
begin
if CopyFile('c:1.txt','c:2.txt',true) then
ShowMessage('Файл успешно скопирован!')
else
ShowMessage('Ошибка! Вот ее код: '+IntToStr(GetLastError));
end;
Таким образом нажав второй раз на кнопку мы получим сообщение: «Ошибка! Вот ее код: 80″. Это говорит нам, что файл существует. Коды всех ошибок можно легко найти в хелпе. Для углубления рассматриваемого вопроса приведу пример копирования файлов с помощью файлового потока (TFileStream). В приведенной пользовательской функции введены два дополнительных параметра From и Count, которые указывают, соответственно, с какого и по какой байт нужно копировать файл. Если необходимо скопировать весь файл, то необходимо передать нули. Вот код этой функции:
function MyCopyFile( InFile,OutFile: String; From,Count: Longint ): Longint; var InFS,OutFS: TFileStream; begin InFS := TFileStream.Create( InFile, fmOpenRead );//создаем поток OutFS := TFileStream.Create( OutFile, fmCreate );//создаем поток InFS.Seek( From, soFromBeginning );//перемещаем указатель в From Result := OutFS.CopyFrom( InFS, Count ); InFS.Free;//освобождаем OutFS.Free;//освобождаем end;
Общие замечания
Перед копированием или удалением файлов всегда проверяйте его наличие функцией FileExists:
if FileExists('c:1.txt') then
if CopyFile('c:1.txt','c:2.txt',true) then
ShowMessage('Файл успешно скопирован!')
Чтобы использовать в функциях CopyFile и DeleteFile имена файлов полученные с помощью, например, OpenDialog, надо из привести к типу PChar:
if CopyFile(Pchar(OpenDialog1.FileName),Pchar(SaveDialog1.FileName),true) then ...
Всегда следите за именами файлов, используемых в функциях. Обращайте внимание на абсолютные и относительные пути. Из-за этого часто возникают ошибки, которые сложно отследить! Ну вот наверно и все, что я хотел бы рассказать Вам о копировании и удалении в Delphi.
Копирование методом TurboPascal
Type
{Для индикации процесса копирования}
TCallBack=procedure (Position,Size:Longint);
procedure FastFileCopy(Const InfileName, OutFileName: String;
CallBack: TCallBack);
Const BufSize = 3*4*4096; { 48Kbytes дает прекрасный результат }
Type
PBuffer = ^TBuffer;
TBuffer = array [1..BufSize] of Byte;
var
Size : integer;
Buffer : PBuffer;
infile, outfile : File;
SizeDone,SizeFile: Longint;
begin
if (InFileName <> OutFileName) then
begin
buffer := Nil;
AssignFile(infile, InFileName);
System.Reset(infile, 1);
try
SizeFile := FileSize(infile);
AssignFile(outfile, OutFileName);
System.Rewrite(outfile, 1);
try
SizeDone := 0; New(Buffer);
repeat
BlockRead(infile, Buffer^, BufSize, Size);
Inc(SizeDone, Size);
CallBack(SizeDone, SizeFile);
BlockWrite(outfile,Buffer^, Size)
until Size < BufSize;
FileSetDate(TFileRec(outfile).Handle, FileGetDate(TFileRec(infile).Handle));
finally
if Buffer <> Nil then Dispose(Buffer);
System.close(outfile)
end;
finally
System.close(infile);
end;
end else
Raise EInOutError.Create('File cannot be copied into itself');
end;
Копирование методом потока
Procedure FileCopy(Const SourceFileName, TargetFileName: String);
Var
S,T : TFileStream;
Begin
S := TFileStream.Create(sourcefilename, fmOpenRead );
try
T := TFileStream.Create(targetfilename, fmOpenWrite or fmCreate);
try
T.CopyFrom(S, S.Size ) ;
FileSetDate(T.Handle, FileGetDate(S.Handle));
finally
T.Free;
end;
finally
S.Free;
end;
end;
Копирование методом LZExpand
uses LZExpand;
procedure CopyFile(FromFileName, ToFileName : string);
var
FromFile, ToFile: File;
begin
AssignFile(FromFile, FromFileName);
AssignFile(ToFile, ToFileName);
Reset(FromFile);
try
Rewrite(ToFile);
try
if LZCopy(TFileRec(FromFile).Handle, TFileRec(ToFile).Handle)<0 then
raise Exception.Create('Error using LZCopy')
finally
CloseFile(ToFile);
end;
finally
CloseFile(FromFile);
end;
end;
Копирование методами Windows
uses ShellApi; // !!! важно
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 TForm1.Button1Click(Sender: TObject);
begin
if not WindowsCopyFile('C:UTILARJ.EXE', GetCurrentDir) then
ShowMessage('Copy Failed');
end;
Как скопировать все файлы вместе с подкаталогами
uses ShellApi;
procedure TForm1.Button1Click(Sender: TObject);
var
OpStruc: TSHFileOpStruct;
frombuf, tobuf: Array [0..128] of Char;
Begin
FillChar( frombuf, Sizeof(frombuf), 0 );
FillChar( tobuf, Sizeof(tobuf), 0 );
StrPCopy( frombuf, 'h:hook*.*' );
StrPCopy( tobuf, 'd:tempbrief' );
With OpStruc do
begin
Wnd:= Handle;
wFunc:= FO_COPY;
pFrom:= @frombuf;
pTo:=@tobuf;
fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
fAnyOperationsAborted:= False;
hNameMappings:= Nil;
lpszProgressTitle:= Nil;
end;
ShFileOperation( OpStruc );
end;
Копирование группы файлов, используя диалог с анимацией «Копирование Файлов», который использует «Проводник»
В следующем примере используется функция SHFileOperation для копирования группы файлов и показа анимированного диалога. Вы можете использовать также следующие флаги для копирования, удаления, переноса и переименования файлов.
TO_COPY FO_DELETE FO_MOVE FO_RENAME
Примечание: буфер, содержащий имена файлов для копирования должен заканчиваться двумя нулевыми символами.
uses ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
var
Fo : TSHFileOpStruct;
buffer: array[0..4096] of char;
p : pchar;
begin
FillChar(Buffer, sizeof(Buffer), #0);
p := @buffer;
p := StrECopy(p, 'C:DownLoad1.ZIP') + 1;
p := StrECopy(p, 'C:DownLoad2.ZIP') + 1;
p := StrECopy(p, 'C:DownLoad3.ZIP') + 1;
StrECopy(p, 'C:DownLoad4.ZIP');
FillChar(Fo, sizeof(Fo), #0);
Fo.Wnd := Handle;
Fo.wFunc := FO_COPY;
Fo.pFrom := @Buffer;
Fo.pTo := 'D:';
Fo.fFlags := 0;
if ((SHFileOperation(Fo) <> 0) or (Fo.fAnyOperationsAborted <> false)) then
ShowMessage('Cancelled')
end;
Автор статьи
Программист Delphi, MySQL. Образование: высшее. Специальность: программное обеспечение информационных технологий.




(11 оценок, среднее: 5,00 из 5)
Загрузка…
Просмотр полной версии : Коды ошибок.
Люди добрые,подскажите,где найти коды ошибок delphi 7.0 с их описанием на РУССКОМ языке.:(
Да,и почему при выполнении функции copyfile delphi не копирует на C:?
Вот что я имею ввиду:procedure TForm1.Button1Click(Sender: TObject);
begin
if copyfile(‘d:1.txt’,’d:2.txt’,true) then
showmessage(‘скопирован’)
else
showmessage(Ошибка: ‘+inttostr(getlasterror));
end;
end.
Так работает.Но стоит заменить d на с так ошика №2.
Люди добрые,подскажите,где найти коды ошибок delphi 7.0 с их описанием на РУССКОМ языке.
я думаю, такого нету. а даже если есть — то перевод там корявый (например, русский МСДН). так что бери английский хелп к делфи и какой-нибудь словарь (например ABBYY Lingvo 12 :super:) и понимай так
Но стоит заменить d на с так ошика №2.
Ошибка №2: ERROR_FILE_NOT_FOUND — The system cannot find the file specified.
то есть не найден файл. может нет прав на чтение/запись?
Благодарствую….правда,я сам у себя на компе админ,я думаю мне всё можно…да и файл 1.txt на нём имеется.
‘d:1.txt’,’d:2.txt’
работает без слешей? может, дело в этом
-или-
вот описание третьего параметра функции:
bFailIfExists
Specifies how this operation is to proceed if a file of the same name as that specified by lpNewFileName already exists. If this parameter is TRUE and the new file already exists, the function fails. If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds.
попробуй поставить FALSE.
Все тоже удивляются,что без слешей работает.Отвечу:Да,работает.
Такой вот метод копирования,скачал его с какого-то сайта посвященного Delphi.Что же про false,то работать однозанчно не будет.
Копирование файлов
В delphi есть функция copyfile. Вот ее описание из хелпа
bool copyfile(
lpctstr lpexistingfilename, // pointer to name of an existing file
lpctstr lpnewfilename, // pointer to filename to copy to
bool bfailifexists // flag for operation if file exists
);
Параметры передаваемые в эту функцию:
Указатель на имя существующего файла (нуль терминированная строка т.е. тип pchar! )
Указатель на имя файла, который будет создан/перезаписан после копирования (нуль терминированная строка т.е. тип pchar! )
Если этот параметр true и файл с таким именем уже существует, то функция вернет false. Если же файл, с именем указанным во втором параметре существует и в качестве третьего параметра передан false — то функция перезапишет файл и благополучно завершится.
Что же про false,то работать однозанчно не будет
почему не будет?
сейчас у теья стоит true. из хелпа: If this parameter is TRUE and the new file already exists, the function fails — тоесть, если новый файл есть, функция вернёт ошибку. а если false — перезапишет. так, попробуй
Прогу сдал…Всем спасибо.
vBulletin® v3.8.9, Copyright ©2000-2023, vBulletin Solutions, Inc.
← →
Bora.ru
(2007-08-28 19:15)
[0]
данная программа по замыслу должна запускаться на удаленном компе и скопировать файл на мой комп в папку Shared, в которой установлен полный доступ.
вот весь код:
var
sourcefile,destfile:pchar;
begin
sourcefile:=»d:file.rar»;
destfile:=»\MyCompSharedfile.rar»;
CopyFile(sourcefile,destfile,false);
end.
Запускаю эту прогу на том компе, но безрезультатно. Хотя с моего компа в его расшаренную папку ф-ция CopyFile копирует без проблем. А также если копировать тот файл в какую-нибудь папку на его компе, то также работает. Но а вот по сети, блин, не хочет.
Что здесь не так?
![]()
![]()
← →
Reindeer Moss Eater ©
(2007-08-28 21:20)
[1]
GetlastErroor знает, что здесь не так.
![]()
![]()
← →
Bora.ru
(2007-08-29 00:27)
[2]
> Reindeer Moss Eater ©
это че функция такая? а как ее использовать?
![]()
![]()
← →
grisme ©
(2007-08-29 02:22)
[3]
F1 тебе подскажет, что за функция такая
![]()
![]()
← →
Reindeer Moss Eater ©
(2007-08-29 10:27)
[4]
Как использовать? Как и все остальные.
Вызывать и смотреть на возвращаемый результат.
![]()
![]()
← →
Bora.ru
(2007-08-29 23:36)
[5]
GetLastError выдает результат — 5. В справке я не нашел, какая ошибка имеет такой код.
![]()
![]()
← →
Германн ©
(2007-08-30 01:26)
[6]
> Bora.ru (29.08.07 23:36) [5]
>
> GetLastError выдает результат — 5. В справке я не нашел,
> какая ошибка имеет такой код.
>
FormatMessage тебе поможет перевести DWORD в LPTSTR.
🙂
![]()
![]()
← →
Reindeer Moss Eater ©
(2007-08-30 09:48)
[7]
Доступ запрещен.
![]()
![]()
← →
Bora.ru
(2007-08-30 11:27)
[8]
> Reindeer Moss Eater © (30.08.07 09:48) [7]
> Доступ запрещен.
Доступ запрещен к файлу-источнику или к папке, куда копируется файл?
![]()
![]()
← →
iXT ©
(2007-08-30 11:31)
[9]
> [8] Bora.ru (30.08.07 11:27)
Попробуй сделать эту операцию средствами не своей прогаммы
![]()
![]()
← →
Reindeer Moss Eater ©
(2007-08-30 11:37)
[10]
Доступ запрещен к файлу-источнику или к папке, куда копируется файл?
А самому-то не догадаться попробовать сначала открыть источник, потом создать файл назначения?
![]()
![]()
← →
Bora.ru
(2007-08-30 11:39)
[11]
> Германн © (30.08.07 01:26) [6]
> FormatMessage тебе поможет перевести DWORD в LPTSTR.
SysErrorMessage проще
![]()
![]()
← →
Bora.ru
(2007-08-30 15:11)
[12]
код выполняется безошибочно, но что странно — безрезультатно.
![]()
![]()
← →
Anatoly Podgoretsky ©
(2007-08-30 15:14)
[13]
Откуда знаешь, нет же никакой обработки ошибок.
![]()
![]()
← →
Bora.ru
(2007-08-30 15:50)
[14]
> Anatoly Podgoretsky © (30.08.07 15:14) [13]
обработчик есть, я его просто позже добавил.
![]()
![]()
← →
Reindeer Moss Eater ©
(2007-08-30 15:51)
[15]
код выполняется безошибочно, но что странно — безрезультатно.
это оптический обман.
![]()
![]()
← →
Anatoly Podgoretsky ©
(2007-08-30 15:52)
[16]
> обработчик есть, я его просто позже добавил.
У тебя обработчик ошибочный
![]()
![]()
← →
Bora.ru
(2007-08-30 16:31)
[17]
var
sourcefile,destfile:pchar;
f:textfile;
e:word;
s:string;
begin
try
sourcefile:=»d:file.rar»;
destfile:=»\MyCompSharedfile.rar»;
CopyFile(sourcefile,destfile,false);
assignfile(f,»error.txt»);
rewrite(f);
write(f,»no errors»);
closefile(f);
except
e:=getlasterror;
s:=SysErrorMessage(e);
assignfile(f,»error.txt»);
rewrite(f);
write(f,s);
closefile(f);
end;
end.
в результате — текстовый файл содержит строку «no errors», но файл не скопирован.
![]()
![]()
← →
Reindeer Moss Eater ©
(2007-08-30 16:37)
[18]
У тебя ошибка в программе
![]()
![]()
← →
Reindeer Moss Eater ©
(2007-08-30 16:39)
[19]
Функции винапи бесполезно обертывать в try except они не генерируют исключений.
![]()
![]()
← →
Сергей М. ©
(2007-08-30 16:45)
[20]
![]()
![]()
← →
Anatoly Podgoretsky ©
(2007-08-30 16:46)
[21]
Не видать обработчика
![]()
![]()
← →
Riply ©
(2007-08-30 18:26)
[22]
>[19] Reindeer Moss Eater © (30.08.07 16:39)
>Функции винапи бесполезно обертывать в try except они не генерируют исключений.
А на чем основано это утверждение ?
![]()
![]()
← →
Reindeer Moss Eater ©
(2007-08-30 18:31)
[23]
А ты попробуй и фальсифицируй это утверждение.
🙂
![]()
![]()
← →
Reindeer Moss Eater ©
(2007-08-30 18:33)
[24]
Винапи написано для всех.
В том числе для тех, кто пользуется языками и компиляторами в которых нет поддержки исключительных ситуаций.
![]()
![]()
← →
Riply ©
(2007-08-30 18:41)
[25]
> [23] Reindeer Moss Eater © (30.08.07 18:31)
>А ты попробуй и фальсифицируй это утверждение.
Я бы попробовала привести контпример, но не знаю как отличить API функцию от не API.
Beep — это API ?
![]()
![]()
← →
Reindeer Moss Eater ©
(2007-08-30 18:43)
[26]
Это Sysutils
procedure Beep;
begin
MessageBeep(0);
end;
А вот это уже Win API
function MessageBeep; external user32 name «MessageBeep»;
![]()
![]()
← →
Reindeer Moss Eater ©
(2007-08-30 18:47)
[27]
…. И там все, как и должно быть у нормальных людей:
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
И никаких генераций исключений
![]()
![]()
← →
Anatoly Podgoretsky ©
(2007-08-30 19:22)
[28]
> Riply (30.08.2007 18:41:25) [25]
Нет, это просто имя, а вот Windows.Beep это АПИ
![]()
![]()
← →
Bora.ru
(2007-08-30 19:31)
[29]
Иными словами ошибка всетаки при CopyFile. Но почему же тогда программа не завершает работу на этом месте?
![]()
![]()
← →
Riply ©
(2007-08-30 19:41)
[30]
>[27] Reindeer Moss Eater © (30.08.07 18:47)
>…. И там все, как и должно быть у нормальных людей:
С тем, что некоторые API генерят исключения под дебугером, все согласны ?
Вот меня и интересует: может есть и такие, которые сгенерят и в «нормальных» условиях ?
![]()
![]()
← →
Leonid Troyanovsky ©
(2007-08-30 19:48)
[31]
> Riply © (30.08.07 19:41) [30]
> С тем, что некоторые API генерят исключения под дебугером,
> все согласны ?
Под некоторым дебугером? 🙂
—
Regards, LVT.
![]()
![]()
← →
Bora.ru
(2007-08-30 19:52)
[32]
короче GetLastError всеравно выдает ошибку «отказано в доступе». Но я на 100% уверен, что к файлу доступ есть. А в папке установлен доступ для записи. Ну люди, не смейтесь — помогите
![]()
![]()
← →
Leonid Troyanovsky ©
(2007-08-30 19:56)
[33]
> Bora.ru (30.08.07 16:31) [17]
> CopyFile(sourcefile,destfile,false);
> assignfile(f,»error.txt»);
> rewrite(f);
> write(f,»no errors»);
> closefile(f);
> except
> e:=getlasterror;
Конечно, вызов CloseHandle из closefile прошел успешно.
Кто ж так ошибки обрабатывает? Учись, студент:
Win32Check(CopyFile(..));
—
Regards, LVT.
![]()
![]()
← →
Leonid Troyanovsky ©
(2007-08-30 19:58)
[34]
> Bora.ru (30.08.07 19:52) [32]
> Но я на 100% уверен, что к файлу доступ есть. А в папке
> установлен доступ для записи.
Что за приложение, как запускается?
—
Regards, LVT.
![]()
![]()
← →
Riply ©
(2007-08-30 20:06)
[35]
> [31] Leonid Troyanovsky © (30.08.07 19:48)
>Под некоторым дебугером? 🙂
Чесно говоря, я в них(дебугерах) не очень разбираюсь,
но под Delphi этот код даст исключение: Handle := CreateEvent(nil, True, True, nil);
NtClose(Handle);
NtClose(Handle);
а в Help»e, (например для CloseHandle) написано:
Closing an invalid handle raises an exception when the application is running under a debugger.
This includes closing a handle twice, and using CloseHandle on a
handle returned by the FindFirstFile function.
P.S.
Sorry, что зафлудила ветку.
![]()
![]()
← →
Bora.ru
(2007-08-30 20:10)
[36]
> Leonid Troyanovsky © (30.08.07 19:58) [34]
> Что за приложение, как запускается?
Просто проект без форм
![]()
![]()
← →
Leonid Troyanovsky ©
(2007-08-30 20:25)
[37]
> Riply © (30.08.07 20:06) [35]
Принимается.
Да, ИШ как-то приводил здесь примеры,
но были там «нормальные условия» не упомню.
—
Regards, LVT.
![]()
![]()
← →
Leonid Troyanovsky ©
(2007-08-30 20:27)
[38]
> Bora.ru (30.08.07 20:10) [36]
> Просто проект без форм
И?
Если сложно, то, конечно, можно не отвечать.
—
Regards, LVT.
![]()
![]()
← →
Bora.ru
(2007-08-30 21:08)
[39]
> Leonid Troyanovsky © (30.08.07 19:58) [34]
> Что за приложение
в первом сообщении написано — это и есть вся программа
> как запускается?
через Telnet запускается
![]()
![]()
← →
Leonid Troyanovsky ©
(2007-08-30 21:34)
[40]
> Bora.ru (30.08.07 21:08) [39]
> через Telnet запускается
Акаунту телнета разрешен доступ к share?
Что показывает net view \MyComp?
И в чем, собс-но, смысл этого приложения, если все
можно (если можно) сделать из телнета.
—
Regards, LVT.
![]()
![]()

Форум программистов Vingrad
| Модераторы: Poseidon, Snowy, bems, MetalFan |
Поиск: |
![]() ![]()
|
|
Опции темы |
| Palladin |
|
||
Опытный Профиль
Репутация: 3
|
Почему-то не работает copyfile
Есть подозрения, видать не получается скопировать, т.к. это БД программы, и она в данный момент используется, но ошибку не бьет просто не копирует, отсюда вопрос как скопировать файл который в данный момент используется… ——————— Глуп тот кто полагается на истину авторитета, а не на авторитет истины |
||
|
|||
| Данкинг |
|
||
Yersinia pestis Профиль
Репутация: 9
|
Подозрения неверные: только что сейчас проверил именно на .mdb — всё отлично работает. Смотри, что у тебя в переменной dir: небось там путь несуществующий. ——————— There’s nothing left but silent epitaphs. |
||
|
|||
| Palladin |
|
||||
Опытный Профиль
Репутация: 3
|
Проверяю, пишу:
т.е. пытаюсь просто скопировать в туже папку где и БД и лишь меняю имя, эффекта 0:( Добавлено @ 01:27
Это сообщение отредактировал(а) Palladin — 10.6.2009, 01:29 ——————— Глуп тот кто полагается на истину авторитета, а не на авторитет истины |
||||
|
|||||
| kami |
|
||
|
Эксперт Профиль
Репутация: 23
|
Есть мнение, что в GetCurrentDir — не тот путь, по которому лежит эта база. Добавлено через 53 секунды |
||
|
|||
| Palladin |
|
||
Опытный Профиль
Репутация: 3
|
Пишу так:
никакого эффекта Добавлено через 57 секунд Добавлено через 9 минут и 42 секунды ——————— Глуп тот кто полагается на истину авторитета, а не на авторитет истины |
||
|
|||
| kami |
|
||
|
Эксперт Профиль
Репутация: 23
|
Да. |
||
|
|||
| Palladin |
|
||
Опытный Профиль
Репутация: 3
|
Ну дак всетаки, что делать? ——————— Глуп тот кто полагается на истину авторитета, а не на авторитет истины |
||
|
|||
| kami |
|
||||
|
Эксперт Профиль
Репутация: 23
|
|
||||
|
|||||
| Palladin |
|
||
Опытный Профиль
Репутация: 3
|
из моего последнего поста, вроде как становится ясно, что я невкурсе даже что это такое… ——————— Глуп тот кто полагается на истину авторитета, а не на авторитет истины |
||
|
|||
| kami |
|
||
|
Эксперт Профиль
Репутация: 23
|
Понятно.
Потом скажи здесь результат. |
||
|
|||
| Akella |
|
||||
Творец Профиль
Репутация: 36
|
а так лучше Добавлено через 1 минуту и 15 секунд |
||||
|
|||||
| Palladin |
|
||
Опытный Профиль
Репутация: 3
|
ошибка№ 2
Однако я еще раз говорю путь указон верно, я проверял на других файлах в этой же папке, не копирует только TableBD.mdb Добавлено через 2 минуты и 32 секунды ——————— Глуп тот кто полагается на истину авторитета, а не на авторитет истины |
||
|
|||
| kami |
|
||
|
Эксперт Профиль
Репутация: 23
|
Как, если не секрет? В особенности если этот файл открыт в другой программе без FILE_SHARE_READ … (кроме шуток, действительно интересует этот вопрос). Это сообщение отредактировал(а) kami — 10.6.2009, 21:51 |
||
|
|||
| Akella |
|
||
Творец Профиль
Репутация: 36
|
Из арсенала дельфистов и т.д. |
||
|
|||



















![]() ![]()
|
| Правила форума «Delphi: Общие вопросы» | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
| 0 Пользователей: |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |













)
