Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   PDF-Datein nach Datenbankvorgabe verschieben (https://www.delphipraxis.net/185215-pdf-datein-nach-datenbankvorgabe-verschieben.html)

Sir Rufo 23. Mai 2015 08:51

AW: PDF-Datein nach Datenbankvorgabe verschieben
 
Wozu die Dateien verschieben? Ich kann jede Datei in einen beliebigen Ordner eines ZIP-Archivs packen.

Also können die Dateien da bleiben, wo die sind und erzeuge einfach das ZIP-Archiv. Das kommt an die Mail und raus damit.

p80286 23. Mai 2015 12:06

AW: PDF-Datein nach Datenbankvorgabe verschieben
 
Naja wie Jobo schon zart andeutete, ist eine Frage der Organisation und Ausbildung. Wenn man ein Verzeichnis für eine Zieladresse hat, ist für die meisten Menschen einfacher damit umzugehen. Und so wie der TE das Problem beschrieben hat, ist der Arbeitsablauf sehr menschlich.

Gruß
k-H

Luckie 23. Mai 2015 12:38

AW: PDF-Datein nach Datenbankvorgabe verschieben
 
Hm. Nach dem Dateinamen in der DB suchen. Feld auslesen wohin und verschieben.

Code:
Dateiname | Ziel
a        | Verzeichnis A
b        | Verzeichnis B
c        | Verzeichnis C
So habe ich es verstanden.

darky95 28. Mai 2015 06:03

AW: PDF-Datein nach Datenbankvorgabe verschieben
 
Okay, habe mich vllt wirklich etwas blöd angestellt bei dem Erstellen des Themas.

Habe mir jetzt folgendes zusammengeschustert:

Code:
procedure TForm1.btnstartSortClick(Sender: TObject);
var i:Integer; fname, dirname : string;

begin
 
      for i:=1 to 248 do begin
      fname:= StringGrid.Cells[1,i];
      dirname:=StringGrid.Cells[2,i];

       if not DirectoryExists('C:\pdfbenannt\'+dirname+'\') then
              CreateDir('C:\pdfbenannt\'+dirname+'\') else
       if not FileExists('C:\pdfbenannt\'+fname+'.pdf') then break else
    end;
    showmessage('Schritt 1 fertig');

    for i:=1 to 248 do begin
      fname:= StringGrid.Cells[1,i];
      dirname:=StringGrid.Cells[2,i];

      renamefile('C:\pdfbenannt\'+dirname+'.pdf','C:\pdfbenannt\'+dirName+'\'+fname+'.pdf') ;
    end;
    showmessage('Schritt 2 fertig');
end;
Bis jetzt erstellt der Ablauf genau die richtigen Ordner, verfrachtet die Dateien jedoch nicht hinein. Kann mir jetzt jemand weiter helfen?

himitsu 28. Mai 2015 08:17

AW: PDF-Datein nach Datenbankvorgabe verschieben
 
Wieso gibst du eigentlich DirectoryExists und CreateDir einen Pfad ("Path" mit abschließendem "\") und kein Verzeichnis ("Dir") ?

Wenn man das mal halbwegs irdentlich formatiert ... Warum wird das Break nur gemacht, wenn das Verzeichnis existierte, aber die Datei nicht?
Wenn das Verzeichnis nicht existiert, dann existiert die Datei doch auch nicht.
Delphi-Quellcode:
if not DirectoryExists('C:\pdfbenannt\'+dirname+'\') then
  CreateDir('C:\pdfbenannt\'+dirname+'\')
else
  if not FileExists('C:\pdfbenannt\'+fname+'.pdf') then
    Break
  else
    {nix};
Warum eigentlich zwei Schleifen und wieso nur in der Ersten das Break?
Wenn man jetzt eine Fehlerprüfung einfügt, würde einem das schön auf die Füsse fallen, da die Funktion natürlich den Fehler "Datei existiert nicht" wirft.

Tipp: Delphi-Referenz durchsuchenForceDirectories

Zitat:

Zitat von darky95 (Beitrag 1303332)
verfrachtet die Dateien jedoch nicht hinein. Kann mir jetzt jemand weiter helfen?

Nee, aber warum fragst du RenameFile nicht? Das weiß doch das Warum und nennt es dir auch.

Delphi-Quellcode:
procedure TForm1.btnstartSortClick(Sender: TObject);
var
  i: Integer;
  fname, dirname: string;
begin
  for i := 1 to 248 do begin
    fname  := StringGrid.Cells[1, i];
    dirname := StringGrid.Cells[2, i];
    if not FileExists('C:\pdfbenannt\'+fname+'.pdf') then
      Break; // oder Continue?
    ForceDirectories('C:\pdfbenannt\'+dirname);
    if not RenameFile('C:\pdfbenannt\'+dirname+'.pdf','C:\pdfbenannt\'+dirName+'\'+fname+'.pdf') then
      RaiseLastOSError;
  end;
  ShowMessage(fertig');
end;
Delphi-Referenz durchsuchenRaiseLastOSError oder Delphi-Referenz durchsuchenRaiseLastWin32Error (in alten Delphis), bzw. MSDN-Library durchsuchenGetLastError und Delphi-Referenz durchsuchenSysErrorMessage
oder Delphi-Referenz durchsuchenTDirectory.CreateDirectory + Delphi-Referenz durchsuchenTFile.Move (CreateDirectory = ForceDirectories).

darky95 28. Mai 2015 11:09

AW: PDF-Datein nach Datenbankvorgabe verschieben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe das StrigGrid nochmal überarbeitet. Der Code sieht jetzt so (übernommen) aus:

Code:
procedure TForm1.btnstartSortClick(Sender: TObject);
var i:Integer; fname, dirname : string;
begin

    for i := 1 to 248 do begin
     fname := StringGrid.Cells[0, i];
     dirname := StringGrid.Cells[1, i];
     if not FileExists('C:\pdfbenannt\'+fname+'.pdf') then
       Continue; // oder Continue?
     ForceDirectories('C:\pdfbenannt\'+dirname);
      if not RenameFile('C:\pdfbenannt\'+dirname+'.pdf','C:\pdfbenannt\'+dirName+'\'+fname+'.pdf') then
       RaiseLastOSError;
   end;
   ShowMessage('fertig');
Nur kann ich mit der Fehlermeldung nichts anfangen (Das System kann die Datei nicht finden - obwohl sie genau in dem Ordner liegt!):|

himitsu 28. Mai 2015 11:34

AW: PDF-Datein nach Datenbankvorgabe verschieben
 
Bist'e dir da ganz sicher?

Groß-/Kleinschreibung ist zwar egal (außer es ist z.B. kein FAT/NTFS), aber sonst muß das 'C:\pdfbenannt\'+dirname+'.pdf' halt stimmen, was es wohl doch nicht tut.


PS: Strg+C im (Fehler)Dialog und als Text irgendwo wieder einfügen (Strg+V)
Vor das RenameFile ein
Delphi-Quellcode:
ShowMessage('C:\pdfbenannt\'+dirname+'.pdf');
-> Strg+C -> im Editor Strg+V -> den Pfad rauskopieren -> und dann mal probehalber in den Explorer kopieren und [Enter]

Mikkey 28. Mai 2015 15:17

AW: PDF-Datein nach Datenbankvorgabe verschieben
 
Zitat:

Zitat von darky95 (Beitrag 1303373)
Habe das StrigGrid nochmal überarbeitet. Der Code sieht jetzt so (übernommen) aus:

Code:
procedure TForm1.btnstartSortClick(Sender: TObject);
var i:Integer; fname, dirname : string;
begin

    for i := 1 to 248 do begin
     fname := StringGrid.Cells[0, i];
     dirname := StringGrid.Cells[1, i];
     if not FileExists('C:\pdfbenannt\'+fname+'.pdf') then
       Continue; // oder Continue?
     ForceDirectories('C:\pdfbenannt\'+dirname);
      if not RenameFile('C:\pdfbenannt\'+dirname+'.pdf','C:\pdfbenannt\'+dirName+'\'+fname+'.pdf') then
       RaiseLastOSError;
   end;
   ShowMessage('fertig');
Nur kann ich mit der Fehlermeldung nichts anfangen (Das System kann die Datei nicht finden - obwohl sie genau in dem Ordner liegt!):|

Bist Du sicher, dass das so gehört, einmal
if not FileExists('C:\pdfbenannt\'+fname+'.pdf')
und danach
RenameFile('C:\pdfbenannt\'+dirname+'.pdf'
??

darky95 29. Mai 2015 07:03

AW: PDF-Datein nach Datenbankvorgabe verschieben
 
Mit folgendem Code hat's wunderbar funktioniert:

Code:
for i := 1 to 248 do begin
     fname := StringGrid.Cells[0, i];
     dirname := StringGrid.Cells[1, i];
     
     if not FileExists('C:\pdfbenannt\'+fname) then
       Continue; // oder Continue?
     ForceDirectories('C:\pdfbenannt\'+dirname);
   
      if not RenameFile('C:\pdfbenannt\'+fname,'C:\pdfbenannt\'+dirName+'\'+fname) then
       RaiseLastOSError;
      ProgressBar1.Position:=ProgressBar1.position+7;
   end;
Vielen Dank an alle! :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 Uhr.
Seite 2 von 2     12   

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