Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.27;
Скачать: CL | DM;

Вниз

CopyFile(PChar(OldFile),PChar(NewFile),False)   Найти похожие ветки 

 
Rimd   (2007-05-08 15:39) [0]

По GetLastError выдает 87L ERROR_INVALID_PARAMETER, все параметры в норме, что он хочет?


 
Reindeer Moss Eater ©   (2007-05-08 15:39) [1]

Правильный параметр хочет


 
DevilDevil ©   (2007-05-08 17:59) [2]

код в студию


 
Reindeer Moss Eater ©   (2007-05-08 18:01) [3]

Код уже два часа как в студии.
:)


 
{RASkov} ©   (2007-05-08 18:17) [4]

> [0] Rimd   (08.05.07 15:39)

Вообще в Сабже все параметры верные...
У тебя после сабжа и перед GetLastError есть еще что-нибудь?
И что есть OldFile, NewFile и чему они равны в момент вызова CopyFile?


 
Reindeer Moss Eater ©   (2007-05-08 18:20) [5]

Вообще в Сабже все параметры верные...
Откуда это известно?

Знаем наперед что там у него в переменных OldFile и NewFile лежит?


 
{RASkov} ©   (2007-05-08 18:55) [6]

> [5] Reindeer Moss Eater ©   (08.05.07 18:20)
> Знаем наперед что там у него в переменных OldFile и NewFile лежит?

То что там лежит это уже не параметры функции из сабжа.... Результат функции PChar() является правильным, для сабжа, параметром.
Я ведь не зря про них(OldFile и NewFile) тоже поинтересовался... ;)


 
Плохиш ©   (2007-05-08 18:57) [7]


> {RASkov} ©   (08.05.07 18:55) [6]
> > [5] Reindeer Moss Eater ©   (08.05.07 18:20)
> > Знаем наперед что там у него в переменных OldFile и NewFile
> лежит?
>
> То что там лежит это уже не параметры функции из сабжа

Может стоит ещё несколько раз пост [0] прочитать...


 
{RASkov} ©   (2007-05-08 19:01) [8]

> [7] Плохиш ©   (08.05.07 18:57)

Ну да.. сначало [0] потом [4].....
Здесь ежу ясно, что что-то не-то с OldFile и NewFile.


 
Rial ©   (2007-05-08 19:01) [9]

> [0] Rimd   (08.05.07 15:39)
> По GetLastError выдает 87L ERROR_INVALID_PARAMETER, все
> параметры в норме, что он хочет?

С чего ты взял, что ошибка вообще возникает ?
GetLastError возвращает последнюю ошибку, но с чего
бы ей быть именно здесь ?


 
{RASkov} ©   (2007-05-08 19:13) [10]

> [9] Rial ©   (08.05.07 19:01)

+1
Даже вот так
procedure TForm1.Button1Click(Sender: TObject);
begin
 CopyFile(PChar(Sender), PChar(Button1), False);
 ShowMessage(SysErrorMessage(GetLastError));
end;

Показывает: Не удается найти указанный файл.
Но если ошибка у автора появляется в момент копирования, то фик знает... пусть полный код покажет...
И опять же... в моем примере сделано специально вызов функции с ошибкой... если в моем примере вызвать функцию без ошибки т.е.
procedure TForm1.Button1Click(Sender: TObject);
begin
 CopyFile(PChar("C:\boot.ini"), PChar("C:\bootold.ini"), False);
 ShowMessage(SysErrorMessage(GetLastError));
end;

то ShowMessage все равно отобразится и покажет последнюю в системе ошибку.


 
begin...end ©   (2007-05-08 20:35) [11]

> {RASkov} ©   (08.05.07 19:13) [10]

> если в моем примере вызвать функцию без ошибки
> то ShowMessage все равно отобразится и покажет последнюю
> в системе ошибку.

Не уверен.


 
{RASkov} ©   (2007-05-08 20:38) [12]

> [11] begin...end ©   (08.05.07 20:35)
> Не уверен.

Покажет... "Операция успешно завершена"
:)


 
Reindeer Moss Eater ©   (2007-05-08 20:50) [13]

То что там лежит это уже не параметры функции из сабжа.... Результат функции PChar() является правильным, для сабжа, параметром.

Да что ты говоришь?
И значит по твоему такой GetlastError это результат паскалевского приведения PChar ?

Остается только пофантазировать, откуда winapi узнало о сущесвтовании PChar и самого Паскаля.


 
begin...end ©   (2007-05-08 20:51) [14]

> {RASkov} ©   (08.05.07 20:38) [12]

Угу. Я просто хотел обратить внимание, что если сразу после вызова CopyFile LastError <> 0, то ошибка возникла именно в результате работы этой функции, т.к. предыдущее значение ошибки она сбрасывает.


 
{RASkov} ©   (2007-05-08 21:02) [15]

> [13] Reindeer Moss Eater ©   (08.05.07 20:50)
> И значит по твоему такой GetlastError это результат паскалевского приведения PChar ?

А откуда у тебя такая уверенность что GetlastError проверен сразу после CopyFile?
ЗЫ Я больше спорить не буду пока не будут ответы на вопросы в [4]....


 
Reindeer Moss Eater ©   (2007-05-08 21:05) [16]

А откуда у тебя такая уверенность что GetlastError проверен сразу после CopyFile?

У меня нет такой уверенности.
И это не моя проблема.
Есть вопрос, в котором русским по белому сказано, что вызов винапи функции обламывается с таким-то кодом гетластеррора.
Все.
Требуется дать максимально адекватный ответ на вопрос "почему?" и "что оно ждет от меня?"

И ответ дан.


 
{RASkov} ©   (2007-05-08 22:08) [17]

> [16] Reindeer Moss Eater ©   (08.05.07 21:05)
> И ответ дан.

Где? Если в [1] - то... куда хочет? Если в CopyFile то См. [9],[15],.... [4] наконец.

И тут противоречие:
 > [16] Reindeer Moss Eater ©   (08.05.07 21:05)
 >У меня нет такой уверенности.
.......
 >вызов винапи функции обламывается с таким-то кодом гетластеррора.
вызов винапи функции - CopyFile я так понимаю.
По твоим словам можно понять, что ошибка GetLastError - это ошибка после CopyFile.
И что не верные параметры именно в CopyFile. Но здесь тогда должна быть уверенность, что GetLastError проверен сразу после CopyFile.

Нет, я не говорю, что я в споре прав, а ты нет(или наоборот)....
В итоге, мы может быть, одно и то-же хотим доказать....(каждый по своему), а автор вопроса молчит как рыба об лед :(

ЗЫ непоспорить не удержался :)


 
Reindeer Moss Eater ©   (2007-05-08 22:42) [18]

Но здесь тогда должна быть уверенность, что GetLastError проверен сразу после CopyFile.

У меня она не должна быть. Мне этого не надо.
Я верю, что автор вопроса не пытается ввести меня в заблуждение.
Верю и отвечаю так, как если бы принимал его вопрос за чистую монету.
Ку?


 
{RASkov} ©   (2007-05-08 22:50) [19]

> Я верю, что автор вопроса не пытается ввести меня в заблуждение.

А я не верю :(

> Верю и отвечаю так, как если бы принимал его вопрос за чистую монету.

Ну ладно.... убедил :) Наивный :) шучу.

Это больше для автора вопроса.
GetLastError нужно проверять сразу после контролируемой функции, или в секции except в первую очередь.
При НЕ выполнении этого(может еще чего не учел, но это первое что пришло на ум) нет гарантии, что GetLastError вернет нужное значение.
Пример:
procedure TForm1.ButtonClick(Sender: TObject);
var N: Integer; OldFile, NewFile: String;
begin
 OldFile:="";
 NewFile:="";
 CopyFile(PChar(OldFile), PChar(NewFile), False);
 N:=GetLastError;
//  BorderStyle:=bsSingle;
 ShowMessage("CurrentError:   "+SysErrorMessage(GetLastError)+#13#10"LastErrorCopyFile: "+IntToStr(N)+"-"+SysErrorMessage(N));
end;

Пробуем с закомментированной строкой и затем ее расскомментируем.
Если подставить имена файлов "нормальные" то, вродебы безобидный код получился, а сообщение немного странное...


 
{RASkov} ©   (2007-05-08 22:54) [20]

> а сообщение немного странное...

"странное" - в кавычках должно быть, потому как ничего странного нет.


 
Anatoly Podgoretsky ©   (2007-05-08 23:33) [21]

> Rimd  (08.05.2007 15:39:00)  [0]

> все параметры в норме

А не врешь?


 
Reindeer Moss Eater ©   (2007-05-09 10:39) [22]

GetLastError нужно проверять сразу после контролируемой функции, или в секции except в первую очередь.

Все интереснее и интереснее.
В секции except вызывать гетластеррор вообще ни малейшего смысла нет.
Объяснять почему, или сам догадаешься?


 
{RASkov} ©   (2007-05-09 11:14) [23]

> [22] Reindeer Moss Eater ©   (09.05.07 10:39)

Согласен, ошибся по поводу except"а...

> Объяснять почему

Расскажи всем, думаю, в этой ветке будет полезно... ;)

Это:
You should call the GetLastError function immediately when a function"s return value indicates that such a call will return useful data.
остается....


 
sinus ©   (2007-05-09 11:20) [24]


> Reindeer Moss Eater ©   (09.05.07 10:39) [22]
> GetLastError нужно проверять сразу после контролируемой
> функции, или в секции except в первую очередь.
>
> Все интереснее и интереснее.
> В секции except вызывать гетластеррор вообще ни малейшего
> смысла нет.
> Объяснять почему, или сам догадаешься?


если можно мог бы кто объяснить по чему нет смысла вызывать getLastError
после в try .. except ?


 
Loginov Dmitry ©   (2007-05-09 12:48) [25]

> если можно мог бы кто объяснить по чему нет смысла вызывать
> getLastError
> после в try .. except ?


Обычно GetLastError применяется после вызова виндовых функций API, а они не генерируют исключение (как правило). В этом случае упоминание try..except здесь не к месту.


 
Anatoly Podgoretsky ©   (2007-05-09 15:29) [26]

> sinus  (09.05.2007 11:20:24)  [24]

Смысл есть, только ты туда
не попадешь


 
Reindeer Moss Eater ©   (2007-05-10 09:14) [27]

а они не генерируют исключение (как правило).

Они просто не генерируют исключений, а не как правило.

Исключения и их обработка - изобретения конкретных языков программирования.
Что делать с исключенииями поднятыми в winapi(если такие были бы), в программе, написанной на языке, не имеющем никакого понятия про исключения (такие языки есть)?


 
Loginov Dmitry ©   (2007-05-10 10:59) [28]

> Они просто не генерируют исключений, а не как правило.


Надеюсь, что это действительно всегда так. Только если где-нибудь в API возникнет непредусмотренная ошибка деления на ноль (это не Дельфевая, а системная ошибка) - что будет?


 
Reindeer Moss Eater ©   (2007-05-10 11:05) [29]

Исключения - это не ошибки, а средство, придуманное разработчиками некоторых языков для удобства программистов.

Исключения в АПИ даже в такой вышеописанной ситуации не будет.


 
{RASkov} ©   (2007-05-10 11:12) [30]

> [29] Reindeer Moss Eater ©   (10.05.07 11:05)
> Исключения в АПИ даже в такой вышеописанной ситуации не будет.

А шо будет-то? Просто интересно.... Винда кирдык? Мне серьезно интересно.


 
Reindeer Moss Eater ©   (2007-05-10 11:17) [31]

Не знаю что будет. Это зависит от программиста писавшего конкретный код.
Скорее всего тот программер аккуратно проверяет аргументы перед вызовом деления.

Но исключения точно не будет.
А если и будет (хотя его ни за что не будет) то вы его в Delphi поймать все равно не сможете. Согласно Библии все исключения это классы. А все классы это потомки TObject.

Вопрос: как в языке, на котором написан, скажем, user32.dll, стать потомком какого-то там TObject?


 
{RASkov} ©   (2007-05-10 11:22) [32]

> [31] Reindeer Moss Eater ©   (10.05.07 11:17)
> user32.dll, стать потомком какого-то там TObject?

про ТКлассы давно понятно.... у меня интерес был в другом... Спасибо за пояснения...


 
{RASkov} ©   (2007-05-10 11:35) [33]

> у меня интерес был в другом...

Дело в том, что если б я знал кроме Delphi какой-нибудь язык, где нет этих обработок исключений, то можно было б проверить на примере [28] :)
отсюда интерес... как на АСМ написать прогу, для проверки вопроса, в пару строк (всего-то например 5-у разделить на 0) и "скомпилить debug"ом." Если кто сможет вот этот батник переделать чёб получилась прога: деления 5-и на 0, то, думаю, мой интерес будет исчерпан...
@ECHO OFF
ECHO N BEEP.COM>BEEP.SCR
ECHO E 0100 B0 07 CD 29 C3>>BEEP.SCR
FOR %%A IN (RCX 0005 W Q) DO ECHO %%A>>BEEP.SCR
DEBUG<BEEP.SCR>NUL
DEL BEEP.SCR

Данный батник делает "пищалку"...


 
Loginov Dmitry ©   (2007-05-10 12:49) [34]

> А если и будет (хотя его ни за что не будет) то вы его в
> Delphi поймать все равно не сможете. Согласно Библии все
> исключения это классы. А все классы это потомки TObject.


Все ж таки склоняюсь к тому, что деление на ноль в API VCL сможет перехватить, и обработать привычным образом. Кто хочет, может это проверить.


 
{RASkov} ©   (2007-05-10 12:57) [35]

> [34] Loginov Dmitry ©   (10.05.07 12:49)
> Кто хочет, может это проверить.

Я хочу.... как? :)


 
Reindeer Moss Eater ©   (2007-05-10 13:13) [36]

Все ж таки склоняюсь к тому, что деление на ноль в API VCL сможет перехватить, и обработать привычным образом.

Перехватить может и можно. Если его кто-то воздбуждает.
А его кто-то возбуждает?
И что это такое на самом деле?
Если исключение - это исключительно языковое понятие.

Это все равно что спросить "как пропинговать tcp порт?"
А что такое "порт" на уровне OCI пинга?
Ничто.
Нет его.


 
Anatoly Podgoretsky ©   (2007-05-10 16:47) [37]

> {RASkov}  (10.05.2007 11:12:30)  [30]

Кырдык конечно, только она
раньше доложит куда
следует.



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

Текущий архив: 2007.05.27;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.054 c
15-1176890619
Ломброзо
2007-04-18 14:03
2007.05.27
Ещё один гвоздик в гробик


2-1178715659
Sapos
2007-05-09 17:00
2007.05.27
Таймаут


6-1163786508
Masterok
2006-11-17 21:01
2007.05.27
idhttp и contentrangestart


1-1175530495
DelphiLexx
2007-04-02 20:14
2007.05.27
Из TPageControl сделать аналог TNoteBook a


15-1177314606
cj
2007-04-23 11:50
2007.05.27
NTFS-DOS