Forum Delphi.cz

Delphi => Obecné => Téma založeno: vangog 19-09-2018, 19:54:25

Název: Nelze zkopírovat soubor
Přispěvatel: vangog 19-09-2018, 19:54:25
Zkoušel jsem copyfile (taktéž i movefile, ale se stejným výsledkem) na windows XP 32:
Kód: Delphi [Vybrat]
  1. copyfile(PChar(s),PChar(targerFile));
  2.  
či
Kód: Delphi [Vybrat]
  1. copyfile(s,targerFile);
obě mi hodí vyjímku v antiwin :

Kód: Delphi [Vybrat]
  1. procedure CopyFile(FromFileName,TofileName:string);
  2. var FromFile, ToFile: file;
  3. begin
  4. AssignFile(FromFile, FromFilename);
  5. AssignFile(ToFile, ToFilename);
  6. Reset(FromFile);      (* NENI OSETRENO NA CHYBU *)
  7. try
  8.   Rewrite(ToFile);
  9.   try // https://www.frameworkpascal.com/helphtml/lzexpand_unit.htm
  10.      if LZCopy (TFileRec(FromFile).Handle,
  11.                 TFileRec(ToFile).Handle) < 0 then
  12.          raise EInOutError.Create('Error copying file');
  13.   finally
  14.      CloseFile(ToFile);
  15.   end;
  16. finally
  17.   CloseFile(FromFile);
  18. end;
  19. end;
  20.  

'Error copying file'

Cílový soubor se vytvořil, ale je prázdný.

FromFileName,TofileName má správné hodnoty, ale kukátkem na FromFile a ToFile nic nevidím.

Jak to vyřešit? Původně jsem chtěl jen přesun souboru, jako aby se nic nekopírovalo ale zdá se že to nejde.
Název: Re:Nelze zkopírovat soubor
Přispěvatel: JaroB 19-09-2018, 19:58:24
V RxLibrary je jednoduchy CopyFile, spustitelny v Delphi 7 viz ke stažení http://micrel.cz/RxLib/dfiles.htm (http://micrel.cz/RxLib/dfiles.htm)
Název: Re:Nelze zkopírovat soubor
Přispěvatel: Delfin 19-09-2018, 20:09:28
Windows taktez obsahuje moznost kopirovat soubory, pomoci CopyFile (https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-copyfile) funkce. OP vsak zda se pouziva LZ dekompresi pomoci LZCopy (https://docs.microsoft.com/en-us/windows/desktop/api/lzexpand/nf-lzexpand-lzcopy) ;) Kdyz jsme u tech kompresi, nejrychlejsi mi zatim vysel LZ4.

Mohu nabidnout wrapper, ale prvne se delfinek potrebuje aklimatizovat a nainstalovat vse z5 na zk****ny Windows 10 :)
Název: Re:Nelze zkopírovat soubor
Přispěvatel: vangog 19-09-2018, 20:15:17
Windows taktez obsahuje moznost kopirovat soubory, pomoci CopyFile (https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-copyfile) funkce. OP vsak zda se pouziva LZ dekompresi pomoci LZCopy (https://docs.microsoft.com/en-us/windows/desktop/api/lzexpand/nf-lzexpand-lzcopy) ;) Kdyz jsme u tech kompresi, nejrychlejsi mi zatim vysel LZ4.

Však právě to Windowsovské copyfile jsem chtěl použít, ale asi se tak nestalo. Co mám špatně v zadaném příkazu? Jak se volá ta windowsovská záležitost?
Název: Re:Nelze zkopírovat soubor
Přispěvatel: Delfin 19-09-2018, 20:22:03
Windows taktez obsahuje moznost kopirovat soubory, pomoci CopyFile (https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-copyfile) funkce. OP vsak zda se pouziva LZ dekompresi pomoci LZCopy (https://docs.microsoft.com/en-us/windows/desktop/api/lzexpand/nf-lzexpand-lzcopy) ;) Kdyz jsme u tech kompresi, nejrychlejsi mi zatim vysel LZ4.

Však právě to Windowsovské copyfile jsem chtěl použít, ale asi se tak nestalo. Co mám špatně v zadaném příkazu? Jak se volá ta windowsovská záležitost?

Kdovi. Psal jsi o chybe jenz byla vyvolana Tebou z vlastni kopirovaci funkce. Windows API funkce jsou ve vetsine pripadu vybaveny tim, ze se nastavi chybova promenna z posledne volane funkce (pomoci SetLastError). A CopyFile (https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-copyfile) neni vyjimkou:

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.

Jen nechapu proc sem pletes dekompresi pres LZCopy (https://docs.microsoft.com/en-us/windows/desktop/api/lzexpand/nf-lzexpand-lzcopy)...
Název: Re:Nelze zkopírovat soubor
Přispěvatel: vangog 19-09-2018, 20:26:35
Windows taktez obsahuje moznost kopirovat soubory, pomoci CopyFile (https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-copyfile) funkce. OP vsak zda se pouziva LZ dekompresi pomoci LZCopy (https://docs.microsoft.com/en-us/windows/desktop/api/lzexpand/nf-lzexpand-lzcopy) ;) Kdyz jsme u tech kompresi, nejrychlejsi mi zatim vysel LZ4.

Však právě to Windowsovské copyfile jsem chtěl použít, ale asi se tak nestalo. Co mám špatně v zadaném příkazu? Jak se volá ta windowsovská záležitost?

Kdovi. Psal jsi o chybe jenz byla vyvolana Tebou z vlastni kopirovaci funkce. Windows API funkce jsou ve vetsine pripadu vybaveny tim, ze se nastavi chybova promenna z posledne volane funkce (pomoci SetLastError). A tato neni vyjimkou:

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.

nepsal jsem žádnou kopírovací funkci. prostě jsem napsal jen copyfile a vyskočila chyba

Ono to krachne takže nezjístím výstupní hodnotu nebo chybovou hlášku
Název: Re:Nelze zkopírovat soubor
Přispěvatel: Delfin 19-09-2018, 20:30:49
nepsal jsem žádnou kopírovací funkci. prostě jsem napsal jen copyfile a vyskočila chyba

Aha, a tyto 2 radky delaji co?

Kód: Delphi [Vybrat]
  1. if LZCopy (TFileRec(FromFile).Handle, TFileRec(ToFile).Handle) < 0 then
  2.   raise EInOutError.Create('Error copying file');

Nevyvolaji nahodou popsanou vyjimku? Prosim pekne, o precteni dokumentace k vysledku funkce LZCopy (https://docs.microsoft.com/en-us/windows/desktop/api/lzexpand/nf-lzexpand-lzcopy) ;)
Název: Re:Nelze zkopírovat soubor
Přispěvatel: vangog 19-09-2018, 20:33:12
nepsal jsem žádnou kopírovací funkci. prostě jsem napsal jen copyfile a vyskočila chyba

Aha, a tyto 2 radky delaji co?

Kód: Delphi [Vybrat]
  1. if LZCopy (TFileRec(FromFile).Handle, TFileRec(ToFile).Handle) < 0 then
  2.   raise EInOutError.Create('Error copying file');

Nevyvolaji nahodou popsanou vyjimku?

No ano. To je to co jsem popsal v otázce. Sem mi to skočí. Ta funkce je součástí delphi 7. Skočilo mi to do antiwin.pas - nevím kde je ten soubor, ale určitě v adresáři pod delphi, jinak by to tam nemohlo skočit...
Název: Re:Nelze zkopírovat soubor
Přispěvatel: Delfin 19-09-2018, 20:37:10
No ano. To je to co jsem popsal v otázce. Sem mi to skočí. Ta funkce je součástí delphi 7. Skočilo mi to do antiwin.pas - nevím kde je ten soubor, ale určitě v adresáři pod delphi, jinak by to tam nemohlo skočit...

Nevim o modulu antiwin. To nejspis nebude soucasti Delphi. Alespon oficialni edice ;)
Název: Re:Nelze zkopírovat soubor
Přispěvatel: vangog 19-09-2018, 20:38:12
Aha, tak pardón. Teď koukám, že ta funkce je součástí projektu (psal ji někdo jiný)  :o

Je to pod modulem antiwin.

Ale jak tedy obejít antiwin a spustit tu správnou funkci?

PS:
Vyřešeno. Jsem tu funkci přejmenoval.
Název: Re:Nelze zkopírovat soubor
Přispěvatel: Stanislav Hruška 19-09-2018, 20:49:42
OT
Citace
Mohu nabidnout wrapper, ale prvne se delfinek potrebuje aklimatizovat a nainstalovat vse z5 na zk****ny Windows 10
A Ty nemáš TrueImage, alebo jeho obdobu? Ináč tiež čakám kedy ma to postihne.
Název: Re:Nelze zkopírovat soubor
Přispěvatel: pepak 19-09-2018, 21:27:12
Windows.CopyFile, respektive WinApi.Windows.CopyFile, podle verze Delphi.
Název: Re:Nelze zkopírovat soubor
Přispěvatel: Delfin 19-09-2018, 21:33:13
OT
Citace
Mohu nabidnout wrapper, ale prvne se delfinek potrebuje aklimatizovat a nainstalovat vse z5 na zk****ny Windows 10
A Ty nemáš TrueImage, alebo jeho obdobu? Ináč tiež čakám kedy ma to postihne.

Nee. Ja na tyto kouzla totiz moc neverim. Nevim jak by si takovy nastroj poradil s migraci aplikaci z 32-bitoveho Windows 7 na 64-bitove Windows 10. Jiste, mam zalohy konfiguraci, ale radeji vse nasypu rucne (mimo to pouzivam spoustu aplikaci portable, takze neni moc co resit). Ale jsem ted moc liny ::) :) VS uz vsak mam :P Jen do toho Delphi se mi zatim moc nechce. Snad az tu spadnou teploty :)

Jinak jsem pouzival a pouzivat budu VirtualBox a v nem co zdarma MS OS nabizi (https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/). Vynikajici vec na hrani bez toho aniz by si nekdo "uspinil" realny stroj ;)
Název: Re:Nelze zkopírovat soubor
Přispěvatel: Delfin 19-09-2018, 22:22:50
Aha, tak pardón. Teď koukám, že ta funkce je součástí projektu (psal ji někdo jiný)  :o

Je to pod modulem antiwin.

Ale jak tedy obejít antiwin a spustit tu správnou funkci?

PS:
Vyřešeno. Jsem tu funkci přejmenoval.

Jedna moznost je pridat scope modulu, tj. pro Delphi 7 Windows.CopyFile (jak tady radil pepak). Jina (ne vsak vhodna) je zmenit poradi modulu v uses klauzuli (pozdeji uvedene maji prednost). Skutecnym resenim je vsak funkci bud prejmenovat pripadne obalit napr. do metod tridy (tedy pro Delphi 7).
Název: Re:Nelze zkopírovat soubor
Přispěvatel: Stanislav Hruška 20-09-2018, 08:24:10
Citace
Nevim jak by si takovy nastroj poradil s migraci aplikaci z 32-bitoveho Windows 7 na 64-bitove Windows 10
To je niečo iné. Ja som si myslel, že Ti padol OS. Tiež som ten prechod nedávno absolvoval ručne.