Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Datei wird nicht kopiert in Win2000/XP (https://www.delphipraxis.net/44153-datei-wird-nicht-kopiert-win2000-xp.html)

BrunoT 14. Apr 2005 13:39


Datei wird nicht kopiert in Win2000/XP
 
Hi,

ich habe folgendes Problem:

Ich möchte unter Windows 2000,XP in Delphi eine Datei kopieren. Die Datei kann nicht erstellt werden, da das Verzeichnis ein Unterverzeichnis von Programme ist(Rechtekonflikt). Pur unter Windows im Explorer und unter Kommandozeile ist das Kopieren möglich.
:?:
Wie kann ich trotzdem eine Datei dort hin kopieren?(Ich mache das jetz mit Shellexecute und erzeugter Batchdatei, was zwar geht,
aber keine Lösung ist) :oops:

ich habe es schon mit GetFileAttributes, GetFileAttributesEx und SetFileAttributes, SetFileAttributesEx versucht,
aber keine Lösung gefunden. :angel2:

Mfg

BrunoT

Christian Seehase 14. Apr 2005 13:43

Re: Datei wird nicht kopiert in Win2000/XP
 
Moin Bruno,

von "Hand" kopieren geht, aber per Programm nicht, da dies wegen Berechtigungen nicht möglich ist? :shock: :gruebel:
Kann ja eigentlich nicht sein. Entweder Du darfst da etwas hinkopieren, oder nicht.

Wie hast Du es denn versucht?

BrunoT 14. Apr 2005 13:52

Re: Datei wird nicht kopiert in Win2000/XP
 
Hallo Christian,

ich habe aus FMXUtils (Delphi/Docs) die Procedure Copyfile benutzt, welche sonst immer funktioniert, nur dort nicht.

mfg

Delphi-Quellcode:

procedure CopyFile(const FileName, DestName: string);
var
  CopyBuffer: Pointer; { buffer for copying }
  BytesCopied: Longint;
  Source, Dest: Integer; { handles }
  Len: Integer;
  Destination: TFileName; { holder for expanded destination name }
const
  ChunkSize: Longint = 8192; { copy in 8K chunks }
begin
  Destination := ExpandFileName(DestName); { expand the destination path }
  if HasAttr(Destination, faDirectory) then { if destination is a directory... }
  begin
    Len := Length(Destination);
    if Destination[Len] = '\' then
      Destination := Destination + ExtractFileName(FileName) { ...clone file name }
    else
      Destination := Destination + '\' + ExtractFileName(FileName); { ...clone file name }
  end;
GetMem(CopyBuffer, ChunkSize); { allocate the buffer }
  try
    Source := FileOpen(FileName, fmShareDenyWrite); { open source file }
    if Source < 0 then raise EFOpenError.CreateFmt(SFOpenError, [FileName]);
    try
      Dest := FileCreate(Destination); { create output file; overwrite existing }
      if Dest < 0 then raise EFCreateError.CreateFmt(SFCreateError, [Destination]);
      try
        repeat
          BytesCopied := FileRead(Source, CopyBuffer^, ChunkSize); { read chunk }
          if BytesCopied > 0 then { if we read anything... }
            FileWrite(Dest, CopyBuffer^, BytesCopied); { ...write chunk }
        until BytesCopied < ChunkSize; { until we run out of chunks }
      finally
        FileClose(Dest); { close the destination file }
      end;
    finally
      FileClose(Source); { close the source file }
    end;
  finally
    FreeMem(CopyBuffer, ChunkSize); { free the buffer }
  end;
end;

freak4fun 14. Apr 2005 14:00

Re: Datei wird nicht kopiert in Win2000/XP
 
Hallo Bruno,
hast du mal versucht die Datei "manuell" dort hinzukopieren, wie Christian gesagt hat? Wenn du nicht als Administrator angemeldet bist, hast du vielleicht gar nicht die Rechte dort etwas hinzukopieren. :zwinker:

MfG
freak

BrunoT 14. Apr 2005 14:13

Re: Datei wird nicht kopiert in Win2000/XP
 
Hallo freak4fun,

Zitat:

Zitat von freak4fun
hast du mal versucht die Datei "manuell" dort hinzukopieren:

Ich bin mit Admin-Rechten angemeldet und das Kopieren in das Verzeichnis funktioniert von "Hand" und als Batch(Explorer und CMD).
:wall:
Es werden irgendwelche Rechte von "oben" durchgereicht, an denen Delphi nicht vorbeikommt :?: :!: :?:

mfg

BrunoT

Christian Seehase 14. Apr 2005 14:33

Re: Datei wird nicht kopiert in Win2000/XP
 
Moin Bruno,

schau Dir mal lieber Hier im Forum suchenSHFileOperation (MSDN-Library durchsuchenSHFileOperation) an.
Die kopiert dann die Dateien auch mit den NTFS-Berechtigungen, und nicht nur die reinen Daten.

BrunoT 14. Apr 2005 14:50

Re: Datei wird nicht kopiert in Win2000/XP
 
Hallo Christian,

danke für den Hinweis, ich werde es mir anschauen, um solchen Fehlern vorzubeugen.

übrigens nach Kompilieren des ganzen Projektes funktionierte es plötzlich :gruebel: .

Warum, werde ich wohl nie erfahren.

mfg

BrunoT


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz