Entwickler-Ecke
Windows API - Probleme mit SHFileOperationA
Skinzone - Fr 04.06.10 15:27
Titel: Probleme mit SHFileOperationA
Morgen kann mir jm. sagen wo ich den Fehler habe?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| function DoFileWork(aOperation: FILEOP_FLAGS; aFrom, aTo: AnsiString; Flags: FILEOP_FLAGS): Integer; var FromPath, ToPath: AnsiString; SHFileOpStruct: TSHFileOpStruct; begin FromPath := aFrom + #0#0; ToPath := aTo + #0#0; with SHFileOpStruct do begin Wnd := 0; wFunc := aOperation; pFrom := PAnsiChar(FromPath); if ToPath <> '' then begin pTo := PAnsiChar(ToPath) end else begin pTo := nil; end; fFlags := Flags; end; Result := SHFileOperationA(SHFileOpStruct); end; procedure TForm1.b_startClick(Sender: TObject); var von,zu: string; begin with TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'config.ini') do try von:=ReadString('Pfad','Von',''); zu:=ReadString('Pfad','Zu',''); if von = '' then showmessage('Bitte geben Sie den Pfad des zu kopierenden Verzeichnis an'); if zu = '' then showmessage('Bitte geben Sie den Pfad des Zielverzeichnis an'); finally Free; end; DoFileWork(von , zu); end; |
Moderiert von
Narses: Delphi-Tags hinzugefügt
Moderiert von
Narses: Titel geändert, war: "Inkompatible Typen AnsiChar and Char".Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 04.06.2010 um 16:09
mkinzler - Fr 04.06.10 15:33
Char ist ab D2010 eine WideChar(16Bit) ein AnsiChar hat aber nur 8Bit.
In welcher Zeile tritt den der Fehler auf?
Skinzone - Fr 04.06.10 15:35
Danke für die schnelle ANtowrt bin langsam echt am verzweifeln.
In der Zeile 13.
Wenn man die Exe startet funktioniert es eig., aber da kommt der Fehler des der Zugriff verweigert wird. Wie kann ich es einstellen das das Programm den Zugriff erlaubt??
mfg
mkinzler - Fr 04.06.10 15:40
Welche Typ hat pFrom und PTo?
Skinzone - Fr 04.06.10 15:42
Müsst ja ein String sein.
Wie bekomm ich die berechtigung das es ein Ordner kopiert?
mfg
Narses - Fr 04.06.10 15:51
Moin!
Skinzone hat folgendes geschrieben : |
Wie bekomm ich die berechtigung das es ein Ordner kopiert? |
Was hat das mit dem Titel des Threads zu tun? :gruebel:
Welche(n) Ordner willst du denn kopieren und welche Rechte hat der angemeldete Benutzer? :nixweiss:
cu
Narses
Skinzone - Fr 04.06.10 16:04
Naja nach dem ich des eine Prob. gelöst hab trat ein anderes auf, und wollte nicht noch ein neuen Thread auf machen.
-Der Benutzer ist Admin
-Der Ordner soll variabel sein und in einer Ini initialisiert werden.
Wenn ich eine Datei direkt auswähle "c:/desktop/bsp.txt" funktioniert es.
-Aber wenn ich im Zielpfad nur den Ordner auswähle: "c:/desktop" kommt: Cannot create file...
zugriff verweigert.
-Wenn ich im "von" pfad nur den Orner wähle dann kommt "cannot read file... zugriff verweigert..
mfg
jaenicke - Fr 04.06.10 16:12
Die Frage ist welche Flags du angibst, denn davon hängt ja ab was die Funktion machst. In deinem Quelltext hast du eine Funktion, die als vierten Parameter Flags bekommt, aber beim Aufruf hast du die unterschlagen...
Sybok Factor - Fr 04.06.10 16:27
Falls es dir nur auf Kopieren eines Verzeichnisses ankommt: Unter Delphi 2010 bietet TDirectory.Copy sehr komfortable Möglichkeiten. Allerdings kann ich dir nicht sagen, ob damit deine Rechteprobleme gelöst werden.
Viele Grüße
Sybok Factor
Skinzone - Fr 04.06.10 16:27
Ah also das FO_COPY?!
Wenn ich das rein schreibe kommt immernoch zugriff verweigert.
So kopiert es glaub nur dateien.
Wie bekomm ich es hin dass es ganze Verzeichnisse kopiert?
---
Moderiert von
Narses: Beiträge zusammengefasst---
Sybok Factor hat folgendes geschrieben : |
Falls es dir nur auf Kopieren eines Verzeichnisses ankommt: Unter Delphi 2010 bietet TDirectory.Copy sehr komfortable Möglichkeiten. Allerdings kann ich dir nicht sagen, ob damit deine Rechteprobleme gelöst werden. |
Hast du zufälllig ein Beispiel mit Directory.Copy da??
mfg
jaenicke - Fr 04.06.10 16:45
Wie meinst du das? Da gibts nichts weiter, einfach hinschreiben. :nixweiss:
Delphi-Quelltext
1:
| TDirectory.Copy('c:\test', 'c:\test1'); |
Und natürlich IOUtils in die uses, aber das steht ja eh in der Hilfe.
Skinzone - Fr 04.06.10 18:32
Danke habs hinbekommen.
Delete - Fr 04.06.10 19:14
Noch ein kleiner Tipp. Die Funktion DoFileWork hat einen schönen Rückgabewert, warum wird die Abfrage des Rückgabewertes einfach ignoriert? So nach dem Motto: "Wird schon nichts passieren?"
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!