AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) PDF-Datein nach Datenbankvorgabe verschieben
Thema durchsuchen
Ansicht
Themen-Optionen

PDF-Datein nach Datenbankvorgabe verschieben

Ein Thema von darky95 · begonnen am 22. Mai 2015 · letzter Beitrag vom 29. Mai 2015
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: PDF-Datein nach Datenbankvorgabe verschieben

  Alt 23. Mai 2015, 08:51
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (23. Mai 2015 um 13:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#12

AW: PDF-Datein nach Datenbankvorgabe verschieben

  Alt 23. Mai 2015, 12:06
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

AW: PDF-Datein nach Datenbankvorgabe verschieben

  Alt 23. Mai 2015, 12:38
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
darky95

Registriert seit: 7. Okt 2013
11 Beiträge
 
#14

AW: PDF-Datein nach Datenbankvorgabe verschieben

  Alt 28. Mai 2015, 06:03
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#15

AW: PDF-Datein nach Datenbankvorgabe verschieben

  Alt 28. Mai 2015, 08:17
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

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).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (28. Mai 2015 um 08:20 Uhr)
  Mit Zitat antworten Zitat
darky95

Registriert seit: 7. Okt 2013
11 Beiträge
 
#16

AW: PDF-Datein nach Datenbankvorgabe verschieben

  Alt 28. Mai 2015, 11:09
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!)
Miniaturansicht angehängter Grafiken
error-code-2.png  
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#17

AW: PDF-Datein nach Datenbankvorgabe verschieben

  Alt 28. Mai 2015, 11:34
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 ShowMessage('C:\pdfbenannt\'+dirname+'.pdf'); -> Strg+C -> im Editor Strg+V -> den Pfad rauskopieren -> und dann mal probehalber in den Explorer kopieren und [Enter]
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (28. Mai 2015 um 11:36 Uhr)
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#18

AW: PDF-Datein nach Datenbankvorgabe verschieben

  Alt 28. Mai 2015, 15:17
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'
??
  Mit Zitat antworten Zitat
darky95

Registriert seit: 7. Okt 2013
11 Beiträge
 
#19

AW: PDF-Datein nach Datenbankvorgabe verschieben

  Alt 29. Mai 2015, 07:03
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!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:36 Uhr.
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