Autor Beitrag
Springbok
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 20.03.11 19:52 
Hallo erstmal. Nachdem ich nun schon lange das Forum benutze um Fragen beantwortet zu bekommen, ohne registriert zu sein, musste (und wollte) ich nun mich anmelden. Erstens, da ich keine Antwort auf meine Frage finde und zweitens, weil ich auch endlich ein zu dieser doch tollen Community gehören will! (Jetzt aber genug von dieser "Schleimerei" :) ) Zu meiner Frage:

Also ich habe folgendes Problem:
Mein Programm benennt verschiedene Dateien um. Diese Dateien liegen aber nicht alle immer im gleichen Verzeichnis wie die .exe-Datei! Wenn die Dateien im selben Verzeichnis liegen, benutzt man ja die Prozedur/Funktion die Delphi einem bereit stellt und zwar: RenameFile(Eingangsname,Ausgangsname).
Was mache ich aber nun, wenn meine .exe-Datei im Verzeichnis "C:\Mein Programm" liegt, die umzubenennende Datei aber in "C:\Programme\Mein Programm"?

Ich dachte da an:
MoveFile(C:\Programme\Mein Programm\IOTA.txt,RenameFile(IOTA.txt,IOTA.bk))

Jedoch funktioniert dies nicht. Die Namensgrösse variiert immer mit der Datei, das heisst, es kann vorkommen, dass eine Datei auch mal BearbeitetesPhotoshopBilderausderCanonKameravomVierwaldStättersee.jpg in Vierwaldstätter See Bild 01.bmp
(rein theoretisch um das Beispiel "bildlich" darzustellen!)!

Ich hoffe es versteht mich jeder, wenn nicht, gerne nachfrage und ich hoffe dass diese Frage nicht unbeantwortet bleibt...

Mit freundlichen Grüssen aus dem sonnigen Norden :)
Kevin
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 20.03.11 20:58 
Hallo und :welcome: im Forum ;-)

user profile iconSpringbok hat folgendes geschrieben Zum zitierten Posting springen:
Was mache ich aber nun, wenn meine .exe-Datei im Verzeichnis "C:\Mein Programm" liegt, die umzubenennende Datei aber in "C:\Programme\Mein Programm"?
Dann musst du zuerst Adminrechte anfordern (weil unter c:\programme) und dann MoveFile normal aufrufen. Alternative wäre ShFileOperation.

user profile iconSpringbok hat folgendes geschrieben Zum zitierten Posting springen:
Ich dachte da an:
MoveFile(C:\Programme\Mein Programm\IOTA.txt,RenameFile(IOTA.txt,IOTA.bk))
Was funktioniert denn nicht, also was passiert? Fehlermeldung? Rückgabewert? Da fehlt bei der zweiten Angabe jedenfalls der Pfad.
Springbok Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 21.03.11 21:15 
Sorry für den kleinen Delay, aber hatte noch Arbeit bis jetzt!
Erstmal danke für deine Antwor!

Also mein Code enthält folgende CodeZeile:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if MoveFile(AppPath+'AIRA2C.txt',(AppPath+(RenameFile(AIRA2C.txt,AIRA2C.off)))=true then
  begin
    Button1.Visible:=True;
    Button1.Enabled:=True;
    Button2.Visible:=False;
    Button2.Enabled:=False;
  end;


Mit diesem Code bekomme ich folgende Fehler:


[Fehler] UMainU.pas(244): Inkompatible Typen: 'String' und 'PAnsiChar'
[Fehler] UMainU.pas(244): Undefinierter Bezeichner: 'AIRA2C'
[Fataler Fehler] frmMain.dpr(5): Verwendete Unit 'UMainU.pas' kann nicht compiliert werden

Achja, AppPath ist eine globale Variable, welcher den Ort speichert, welche in der Registry steht.

Was ist denn falsch hier? Stehe auf dem Schlauch oder?

Ich hoffe es ist klar und verständlich genug erklärt um Hilfe zu bekommen!
Achja etwas muss ich aber noch los werden - ihr seid wirklich ein tolles Forum!

mfg

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
haentschman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: Mo 21.03.11 21:24 
Hallo...

auf den ersten übermüdeten Blick sind 2 Klammern, ein Rename und ein True zu viel, 2 PChar zu wenig...
ausblenden Delphi-Quelltext
1:
if MoveFile(PChar(AppPath+'AIRA2C.txt'),PChar(AppPath+AIRA2C.off)) then					


ähmmm... das würde ja ein reines Rename ergeben :gruebel: erkläre doch bitte nochmal an einem Beispiel welche Datei wohin soll, wie sie vorher heißt und nachher...irgendwie hab ich das nicht wirklich verstanden.

Danke
Springbok Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 21.03.11 23:11 
Ok. Gerne!
Mein Programm kopiert 2 Dateien von 2 verschiedenen Ordnern.
Angefangen hiermit.
Programm, das ich erstellt habe (mit eurer Hilfe), liegt im "Eigene Dateien"-Ordner oder irgendwo anders. Beim Programm liegt allerdings noch ein Ordner bei das Kopierer heisst. Dort sind 2 weitere Dateien drin, welche kopiert werden, wenn der User es will.
Ordnerstruktur also wie folgt:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
|-Eigene Dateien
  |-Mein Programm
    |-Kopierer.exe
    |-Kopierer
      |-Datei A.backup
      |-Datei B.backup


Dann gibt es aber noch dem Programm Ordner in dem mein Programm liegt.
Dies ist dann zum Beispiel folgender Ordner:
ausblenden Quelltext
1:
C:\Program Files\Sidebar					


Wo die Stelle liegt weiss das Programm ja durch die generelle Variable "AppPath", die schon beim "FormCreate" erstellt und initialisiert wird.

Also dann, die GUI ist dabei sehr einfach gehalten. Zwei Buttons und mehr nicht.
Button 1 ist das Backup, Button 2 ist dafür da die Standarddatei(en) wiederherzustellen.

Also die Aufgabe von Button1.OnClick lautet also:
1) Datei A.ini (aus dem Ordner: C:\Program Files\Sidebar) in Datei A.backup umbenennen.
2) Datei A.backup (vom Eigene-Dateien Ordner zum Beispiel) in Datei A.ini umbenennen und nach C:\Program Files\Sidebar kopieren.

Könnte man den Code dann vielleicht auch folgendermassen schreiben (nur so ne Idee von mir):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure Button1.OnClick(Sender: TObject);
begin
  //1. Schritt siehe oben! Die passiert im Ordner C:\Program Files\Sidebar 
  RenameFile(Datei A.ini,Datei A.backup) 
  //2. Schritt im Eigene Dateien-Ordner und im Ordner C:\Program Files\Sidebar
  RenameFile(Datei A.backup,Datei A.ini)
  MoveFile(C:\Dokumente & Einstellungen\User01\Eigene Dateien\Datei A.ini,C:\Program Files\Sidebar\Datei A.ini)
end;


Dabei muss nur dann noch eine weitere Variable deklariert werden:
Wie kann ich hier einstellen, dass die Datei aus dem Ordner C:\Program Files\Sidebar, also nicht dem Startordner der selbst gebauten .exe-Datei, genommen wird?

Ich hoffe nun ist es etwas klarer, wenn nicht, dann nochmal Bescheid geben bitte! Erkläre gerne nochmal!

mfg
Springbok Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 17.06.11 23:02 
Hey ich habe das Problem endlich heute Abend gelöst bekommen.

Einfach die MoveFile "Funktion" in die RenameFile Funktion eingefügt und schon macht er es so wie ich es will!

Problem endlich gelöst. Ach was bin ich froh!

Danke an alle Helfer!

mfg