Autor Téma: Nelze zkopírovat soubor  (Přečteno 658 krát)

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 370
  • Karma: 0
    • Verze Delphi: 7
Nelze zkopírovat soubor
« kdy: 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.

Online JaroB

  • Guru
  • *****
  • Příspěvků: 953
  • Karma: 27
    • Verze Delphi: XE8, Seattle
Re:Nelze zkopírovat soubor
« Odpověď #1 kdy: 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

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 370
  • Karma: 0
    • Verze Delphi: 7
Re:Nelze zkopírovat soubor
« Odpověď #2 kdy: 19-09-2018, 20:15:17 »
Windows taktez obsahuje moznost kopirovat soubory, pomoci CopyFile funkce. OP vsak zda se pouziva LZ dekompresi pomoci 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?

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 370
  • Karma: 0
    • Verze Delphi: 7
Re:Nelze zkopírovat soubor
« Odpověď #3 kdy: 19-09-2018, 20:26:35 »
Windows taktez obsahuje moznost kopirovat soubory, pomoci CopyFile funkce. OP vsak zda se pouziva LZ dekompresi pomoci 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
« Poslední změna: 19-09-2018, 20:28:32 od vangog »

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 370
  • Karma: 0
    • Verze Delphi: 7
Re:Nelze zkopírovat soubor
« Odpověď #4 kdy: 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...

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 370
  • Karma: 0
    • Verze Delphi: 7
Re:Nelze zkopírovat soubor
« Odpověď #5 kdy: 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.
« Poslední změna: 19-09-2018, 20:44:54 od vangog »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Nelze zkopírovat soubor
« Odpověď #6 kdy: 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.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1412
  • Karma: 34
    • Pepak.net
Re:Nelze zkopírovat soubor
« Odpověď #7 kdy: 19-09-2018, 21:27:12 »
Great
Rated 1 time
Windows.CopyFile, respektive WinApi.Windows.CopyFile, podle verze Delphi.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Nelze zkopírovat soubor
« Odpověď #8 kdy: 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.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.