Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rekursiv Suchen (https://www.delphipraxis.net/187222-rekursiv-suchen.html)

GroZ 9. Nov 2015 12:54

Delphi-Version: 7

Rekursiv Suchen
 
Hey,
Ich habe ein Problem.
Mein Konverter ist immer noch nicht fertig.
Mein Problem ist ganz einfach eigentlich aber ich komme dennoch nicht weiter.
Delphi-Quellcode:
var f : integer;
    eingabe, Parameter : string;
    X : TSearchRec;
begin
  writeln('FRP to PDF');
  Writeln('');
  Writeln('Verzeichnis eingeben:');
  readln(eingabe);
  Parameter := 'PFAD';
  if eingabe = Parameter +'/dir' then
    begin
      Writeln(Parameter);
      if FindFirst(Parameter, faAnyFile, X) = 0 then try
    repeat
      FRPzuPDF(Parameter,ChangeFileExt(Parameter,'.pdf'));
    until FindNext(X) = 1; //Hier kommt immer ne' Endlosschleife
  finally
    FindClose(X);
    Writeln('Konvertierung erfolgreich');
    end;
end;
Das ist die Prozedur.
Mein Problem ist das er in dem Ordner die Dateien nicht konvertiert. Sprich er öffnet nur den Ordner und probiert dann "nix" zu konvertieren. Könnt ihr mir helfen?
Danke im Vorraus

baumina 9. Nov 2015 13:00

AW: Erneute Hilfe
 
FindNext ist 0 wenns klappt, ansonsten liefert dir Findnext den Fehlercode zurück. Du fragst auf 1 ab, d.h. er bricht nur ab, wenn der Fehlercode 1 ist. Besser wäre auf <> 0 abzufragen.

haentschman 9. Nov 2015 13:03

AW: Erneute Hilfe
 
Hallöle...:P

auf den ersten Blick fehlen end´s zum begin und das repeat steht wahrscheinlich falsch. Um dir exakt helfen zu können schreibe mal in Prosa wie du dir den Ablauf vorstellst ohne auf den Quelltext zu gucken. :thumb:

GroZ 9. Nov 2015 13:04

AW: Erneute Hilfe
 
Das hab ich natürlich probiert. Jedoch das selbe Ergebnis. Kommt keine Fehlermeldung er hat halt ne Endlosschleife

Also ablaufen sollte das ganze so:

Konsole öffnen:

'Pfad eingeben' + /dir
Enter
Konvertierungsprozedur
wiederholen bis komplette Verzeichnis konvertiert ist.

HolgerX 9. Nov 2015 13:08

AW: Erneute Hilfe
 
Hmm..

Da sind mehrere Fehler drinnen..

Und da ich nicht jeden einzelnd erklären will, hier mal eine Funktion, welche Dir alle Dateien eines Verzeichnisses auflistet:

Delphi-Quellcode:
procedure GetFileList(APath : string;AList : TStrings;WithSubPath : boolean);
var
  sr: TSearchRec;
  tmpPath : string;
begin
  tmpPath := IncludeTrailingPathDelimiter(APath);
  if FindFirst(tmpPath+'*.*', faAnyFile, sr) = 0 then begin
    repeat
      if (sr.Attr or faDirectory) = sr.Attr then begin
        if WithSubPath then begin
          if (sr.Name[1] <> '.') then
            GetFileList(tmpPath+sr.Name,AList,WithSubPath);
        end;
      end else begin
        AList.Add(tmpPath + sr.Name);
      end;
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;
end;
Danach gehst Du die Liste durch und versucht alle Dateien mit .pdf Erweiterung zu konvertieren.

baumina 9. Nov 2015 13:08

AW: Erneute Hilfe
 
Achso, interessanterweise machst du mit dem gefundenen TSearchRec X gar nichts.

In die repeat-Schleife kommt er nur, wenn die Eingabe genau "PFAD/dir" lautete.

GroZ 9. Nov 2015 13:11

AW: Erneute Hilfe
 
Was müsste ich denn da vorher noch "deklarieren"?
Hab in der OH geguckt das einzige was für mich relevant wäre, wäre FileName und der ist immer unterschiedlich. Bei meinen Testordner zum Beispiel Folien1-10

Sir Rufo 9. Nov 2015 13:49

AW: Erneute Hilfe
 
Ich würde mir schon mal gar keine spezielle Routine dafür bauen, sondern eine generelle und diese dann verwenden. Dann wird auch der gesamte Code übersichtlicher.

Hier etwas zum Herumspielen
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  SysUtils;

type
  TProcessFileCallback = procedure( const AFilename: string );

procedure ProcessFiles( const ADirectory, ASearchPattern: string; ACallback: TProcessFileCallback; AAttr: Integer = faAnyFile; ARecursive: Boolean = False );
var
  SearchRec: TSearchRec;
begin
  // Dateien suchen
  if FindFirst( IncludeTrailingPathDelimiter( ADirectory ) + ASearchPattern, AAttr, SearchRec ) = 0
  then
    try
      repeat
        ACallback( IncludeTrailingPathDelimiter( ADirectory ) + SearchRec.Name );
      until FindNext( SearchRec ) <> 0;
    finally
      FindClose( SearchRec );
    end;

  // Wenn rekursiv
  if ARecursive
  then // dann
    begin
      // Verzeichnisse suchen
      if FindFirst( IncludeTrailingPathDelimiter( ADirectory ) + '*.*', faDirectory, SearchRec ) = 0
      then
        try
          repeat
            if ( SearchRec.Name <> '.' ) and ( SearchRec.Name <> '..' )
            then
              ProcessFiles( IncludeTrailingPathDelimiter( ADirectory ) + SearchRec.Name, ASearchPattern, ACallback, AAttr, ARecursive );
          until FindNext( SearchRec ) <> 0;
        finally
          FindClose( SearchRec );
        end;
    end;
end;

procedure ProcessSomeFiles( const AFilename: string );
begin
  // Hier erledigen wir die eigentliche Arbeit
  WriteLn(AFilename);
end;

procedure Test;
begin
  WriteLn('=== STARTING ===');
  ProcessFiles( 'C:\Users', '*.png', ProcessSomeFiles, faAnyFile, True );
  WriteLn('=== FINISHED ===');
end;

begin
  try
    Test;
  except
    on E: Exception do
      Writeln( E.ClassName, ': ', E.Message );
  end;

end.

Phoenix 9. Nov 2015 13:51

AW: Erneute Hilfe
 
@GroZ wärest Du bitte so freundlich und editierst nochmal Deinen ersten Beitrag und gibst ihm einen Aussagekräftigen Titel?
Mit "Erneute Hilfe" kann keiner was anfangen und es wäre schade, wenn wir das Thema wegen einem extrem schlecht gewählten Titel zu machen zu müssen.

Danke.

Luckie 9. Nov 2015 13:53

AW: Erneute Hilfe
 
Bitte gib deinen Beiträgen in Zukunft aussagekräftige Titel, in denen deutlich wird, um was es geht.

GroZ 9. Nov 2015 14:15

AW: Rekursiv Suchen
 
@Mod Erledigt hoffe das reicht so. Was anderes ist mir nicht eingefallen :lol:

@SirRufo mein Problem besteht ja darin das auch weiterhin nur einzelene Dateien konvertierbar sein müssen. Kann ich trotzdem eine generelle nehmen?

Sir Rufo 9. Nov 2015 14:23

AW: Rekursiv Suchen
 
Zitat:

Zitat von GroZ (Beitrag 1320942)
@SirRufo mein Problem besteht ja darin das auch weiterhin nur einzelene Dateien konvertierbar sein müssen. Kann ich trotzdem eine generelle nehmen?

Wenn ich das richtig verstanden habe, dann willst du alle *.frp Dateien im Verzeichnis C:\WoAuchImmer umwandeln. Richtig?
Delphi-Quellcode:
procedure ConvertFrpToPdf( const AFilename: string );
begin
  FrpToPdf( AFilename, ChangeFileExt( AFilename, '.pdf' ) );
end;

procedure DoIt;
begin
  ProcessFiles( 'C:\WoAuchImmer', '*.frp', ConvertFrpToPdf );
end;
Fertig => Ja, kann man (und vor allem sehr übersichtlich)

GroZ 9. Nov 2015 14:25

AW: Rekursiv Suchen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1320943)
Zitat:

Zitat von GroZ (Beitrag 1320942)
@SirRufo mein Problem besteht ja darin das auch weiterhin nur einzelene Dateien konvertierbar sein müssen. Kann ich trotzdem eine generelle nehmen?

Wenn ich das richtig verstanden habe, dann willst du alle *.frp Dateien im Verzeichnis C:\WoAuchImmer umwandeln. Richtig?
Delphi-Quellcode:
procedure ConvertFrpToPdf( const AFilename: string );
begin
  FrpToPdf( AFilename, ChangeFileExt( AFilename, '.pdf' ) );
end;

procedure DoIt;
begin
  ProcessFiles( 'C:\WoAuchImmer', '*.frp', ConvertFrpToPdf );
end;
Fertig => Ja, kann man (und vor allem sehr übersichtlich)

Genau. Das Verzeichnis möchte ich dann via Konsole angeben. Das geht alles auch schon wie ich das möchte. Lediglich die Endlosschleife krieg ich nicht gelöst. Aber ich werde jetzt deinen Vorschlag mal ausprobieren und werde berichten.

p80286 9. Nov 2015 14:40

AW: Rekursiv Suchen
 
Zitat:

Zitat von GroZ (Beitrag 1320944)
Lediglich die Endlosschleife krieg ich nicht gelöst. Aber ich werde jetzt deinen Vorschlag mal ausprobieren und werde berichten.

Darf ich Deine Aufmerksamkeit auf #2 lenken, du solltest auf
Delphi-Quellcode:
<>0
testen und nicht auf
Delphi-Quellcode:
=1
und als Überschrift wäre "Dateien rekursiv suchen" noch besser.

Gruß
K-H

GroZ 9. Nov 2015 15:04

AW: Rekursiv Suchen
 
Zitat:

Zitat von p80286 (Beitrag 1320945)
Zitat:

Zitat von GroZ (Beitrag 1320944)
Lediglich die Endlosschleife krieg ich nicht gelöst. Aber ich werde jetzt deinen Vorschlag mal ausprobieren und werde berichten.

Darf ich Deine Aufmerksamkeit auf #2 lenken, du solltest auf
Delphi-Quellcode:
<>0
testen und nicht auf
Delphi-Quellcode:
=1
und als Überschrift wäre "Dateien rekursiv suchen" noch besser.

Gruß
K-H

Das hab ich probiert nur wird da die Funktion komplett übersprungen. Also er schreibt dann 'Konvertierung erfolgreich' aber Dateien wurden nicht konvertiert. Und gleich danach Fehler 1 das bedeutet dass das Verzeichnis falsch ist....

baumina 9. Nov 2015 15:06

AW: Rekursiv Suchen
 
Du warst nie und nimmer in einer Endlosschleife drin, denn deine if-Abfrage auf "PFAD/dir" hat verhindert, dass du jemals in die repeat-Schleife reinkommst, außer deine Eingabe lautete tatsächlich "PFAD/dir" und dieses Verzeichnis wird's wohl nicht geben.

GroZ 9. Nov 2015 15:08

AW: Rekursiv Suchen
 
Zitat:

Zitat von baumina (Beitrag 1320948)
Du warst nie und nimmer in einer Endlosschleife drin, denn deine if-Abfrage auf "PFAD/dir" hat verhindert, dass du jemals in die repeat-Schleife reinkommst, außer deine Eingabe lautete tatsächlich "PFAD/dir".

Doch ich war in einer drin. Also die CPU auslastung ist von 3% auf 95% hochgegangen :lol:
und "PFAD" ist zum Beispiel "C:\Programme\Foo\Alt\usw" nicht das Wort Pfad :lol:

baumina 9. Nov 2015 15:12

AW: Rekursiv Suchen
 
Wie kannst du in der Endlosschleife drin sein, wenn er angeblich schreibt "Konvertierung erfolgreich". :gruebel:

GroZ 9. Nov 2015 15:16

AW: Rekursiv Suchen
 
Das "Konvertierung erfolgreich" kommt nur wenn ich
Delphi-Quellcode:
<> 0
habe. Sprich da ist keine Endlosschleife. Die Endlosschleife kommt nur wenn ich
Delphi-Quellcode:
= 0
nutze.

baumina 9. Nov 2015 15:24

AW: Rekursiv Suchen
 
Dann hab ich wohl deinen Post #4 falsch interpretiert.

HolgerX 9. Nov 2015 17:25

AW: Rekursiv Suchen
 
Da Du anscheinend mein Post (#5) nicht willst...

.. zerlege ich deinen Code von Post #1

Delphi-Quellcode:
var f : integer;
    eingabe, Parameter : string;
    X : TSearchRec;
begin
  writeln('FRP to PDF');
  Writeln('');
  Writeln('Verzeichnis eingeben:');
  readln(eingabe);
  Parameter := 'PFAD';
  if eingabe = Parameter +'/dir' then
    begin
      Writeln(Parameter);
      if FindFirst(Parameter, faAnyFile, X) = 0 then try  // Hier fehlt ein an den Parameter angehängtes '*.*' oder direkt '*.FRP', notwendig, damit FindFirst auch nach Files sucht
    repeat
      FRPzuPDF(Parameter,ChangeFileExt(Parameter,'.pdf')); // Hier sollte eigentlich was mit x.Name gemacht werden, sprich dem gefundenen Dateiname. In Parameter steht ja nur ein Verzeichnis und kein Dateiname !!
    until FindNext(X) = 1; //Hier kommt immer ne' Endlosschleife   // Und wie schon mehrfach geschrieben '<> 0'
  finally
    FindClose(X);
    Writeln('Konvertierung erfolgreich');
    end;
end;
Deine Routine findet ein Verzeichnis, keine Datei!
Wenn deine Suche mit *.* gemacht würde, dann würde er Filenamen in X zurückgeben, sprich die Dateien, welche Du ja eigentlich konvertieren willst. Da Du diese aber nicht benutzt, passiert auch nichts.

Er spring bei <> 0 direkt wieder raus, da er ja das Verzeichnis schon gefunden hat und kein weiteres (gleiches) findet..

So, jetzt schaust Du DIr mal die Funktion in meinem Post #5 oder den Post von Sir Rufo #8 an, da ist genau das hier geschriebene gemacht worden..

baumina 10. Nov 2015 06:06

AW: Rekursiv Suchen
 
Mir leuchtet die if-Abfrage nicht ein, warum dann überhaupt eine Eingabe machen lassen, wenn es sowieso nur für das eine Verzeichnis gilt.

GroZ 10. Nov 2015 07:12

AW: Rekursiv Suchen
 
nene das ist nur zum testen ein festes Verzeichnis
Delphi-Quellcode:
var f : integer;
    eingabe, Parameter : string;
    SearchRec : TSearchRec;
begin
  writeln('FRP to PDF');
  Writeln('');
  Writeln('Verzeichnis eingeben:');
  readln(eingabe);
  Parameter := 'C:\Dokumente und Einstellungen\jgross\Desktop\TestSpeichern\'; //Für Testzwecke -> Später noch ändern
  if eingabe = Parameter +'/dir' then
    begin
      if FindFirst(Parameter+'*.*', faDirectory, SearchRec) = 0 then try
    repeat
      if (SearchRec.Name <> '.') then
        FRPzuPDF(Parameter,ChangeFileExt(Parameter,'.pdf'));
    until FindNext(SearchRec)<> 0; //Hier kommt immer ne' Endlosschleife
  finally
    FindClose(SearchRec);
    Writeln('Konvertierung erfolgreich');
    end;
end;
Im Debug Modus ist er genau 8x die Prozedur durchgegangen also hat sozusagen geklappt. Aber die Dateien wurden nicht konvertiert. Ich schau mir jetzt die Prozedur nochmal an. Diese geht aber eigentlich.
Ich glaube ich habe meinen Fehler gefunden. Die Prozedur möchte den genauen Namen zurück haben. Sie kriegt aber nur den Pfad ohne Dateinamen.

Zoot 10. Nov 2015 10:25

AW: Rekursiv Suchen
 
Ein erster Schritt wäre wirklich mal, die Antwortbeiträge zu lesen.

Delphi-Quellcode:
FRPzuPDF(Parameter,ChangeFileExt(x.Name,'.pdf'));
Könnte helfen.

Sir Rufo 10. Nov 2015 10:39

AW: Rekursiv Suchen
 
Zitat:

Zitat von Zoot (Beitrag 1320979)
Ein erster Schritt wäre wirklich mal, die Antwortbeiträge zu lesen.

Delphi-Quellcode:
FRPzuPDF(Parameter,ChangeFileExt(x.Name,'.pdf'));
Könnte helfen.

Nein, hilft so gar nicht ... denn im
Delphi-Quellcode:
TSearchRec.Name
steht der Dateiname ohne Pfadangabe :warn:

nuclearping 10. Nov 2015 12:52

AW: Rekursiv Suchen
 
Ich weiss, dass hier solche Vorschläge nicht gern gesehen sind. Aber vielleicht sollte der TE erstmal lernen, wie man 1) Code ordentlich einrückt, damit er leserlich ist und 2) den Debugger bedient, damit man sich nicht drei Seiten lang völlig lernresistent im Kreis bewegt und eine Copy & Paste-Lösung nach der anderen probiert und es immernoch nicht hinbekommt? Man man man ... :roll:

GroZ 10. Nov 2015 12:56

AW: Rekursiv Suchen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe mithilfe eines Arbeitskollegens das Programm komplett umgeschrieben:
Bekomme jetzt eine Exception... Hier der Code:
Delphi-Quellcode:
program FRPtoPDF;

uses
  Forms,
  SysUtils,
  Math,
  ShellApi,
  frxClass,
  frxExportPDF,
  FR_Class,
  PsFR_E_Main,
  PsFR_E_PDF,
  Graphics;

{$AppType Console}

function FRPzuPDF(AFRPFile, APDFFile : string): boolean;
var
  frReport : TfrReport;
  PDFExport : TPsfrPDFExport;
begin
  Result := false;
  if not FileExists(AFRPFile) then
    exit;

  if FileExists(APDFFile) then
    if not DeleteFile(APDFFile) then
      exit;

  frReport := TFrReport.Create(NIL);
  PDFExport := TPsfrPDFExport.Create(NIL);

  try
    PDFExport.ShowDialog := false;
    frReport.ShowProgress := false;
    try
      frReport.LoadPreparedReport(AFRPFile);
      frReport.ExportTo(PDFExport, APDFFile);
    except
      exit;
    end;

  finally
    PDFExport.Free;
    frReport.Free;
  end;

  Result := true;
end;


function VerzeichnisMitFRPzuPDF(PfadUndDateimaske: string; SubDirs: boolean): boolean;
var
  X : TSearchRec;
  Pfad: string;
begin
  Result:=false;

  if FindFirst(PfadUndDateimaske, faAnyFile, X) = 0 then
  try
    repeat
      Write(ExtractFilePath(PfadUndDateimaske)+X.Name+' --> '+ChangeFileExt(ExtractFilePath(PfadUndDateimaske)+X.Name,'.pdf')+'...');

      Result:=FRPzuPDF(ExtractFilePath(PfadUndDateimaske)+X.Name,ChangeFileExt(ExtractFilePath(PfadUndDateimaske)+X.Name,'.pdf'));

      if not Result then
      begin
        Writeln('Fehler!');
        break;
      end
      else
        Writeln('OK');
    until FindNext(X) <> 0;
  finally
    FindClose(X);
  end;

  if Result then
  begin
    if SubDirs then
    begin
      Pfad:=ExtractFilePath(PfadUndDateimaske);

      if FindFirst(Pfad+'*.*', faDirectory, X) = 0 then
      try
        repeat
          if (X.Name <> '.') and (X.Name <> '..') and ((X.Attr and faDirectory) <> 0) then
          begin
            Result:=VerzeichnisMitFRPzuPDF(ExtractFilePath(PfadUndDateimaske)+X.Name+'\'+ExtractFileName(PfadUndDateimaske),SubDirs);
            if not Result then
              break;
          end;
        until FindNext(X) <> 0;
      finally
        FindClose(X);
      end;
    end;
  end;
end;

var
  Parameter : string;
  SubDirs: boolean;
begin
  Writeln('FRP to PDF');

  if ParamCount<1 then
    exit;

  Parameter := ParamStr(1);
  if Copy(Parameter,Length(Parameter),1)<>'\' then
    Parameter:=Parameter+'\';

  if ExtractFileName(Parameter)='' then
    Parameter:=Parameter+'*.FRP';

  SubDirs:=(ParamCount>1) and (AnsiUpperCase(ParamStr(2))='/S'); // /S für SubDirectorys

  VerzeichnisMitFRPzuPDF(Parameter,SubDirs);
end.
Im Anhang ist die Exception...

TiGü 10. Nov 2015 13:03

AW: Rekursiv Suchen
 
Zitat:

Zitat von GroZ (Beitrag 1320999)
Habe mithilfe eines Arbeitskollegens das Programm komplett umgeschrieben:
Bekomme jetzt eine Exception... Hier der Code:

Was möchtest du jetzt von uns?
Frage doch deinen Arbeitskollegen.

Bitte beschäftige dich mit dem Debugger und wie man ihn verwendet!

Ansonsten gibt's noch andere schöne Lehrstellen im handwerklichen Bereich, wo man mehr mit den Händen arbeitet.
Kann auch sehr schön sein!

GroZ 10. Nov 2015 13:06

AW: Rekursiv Suchen
 
Ich würde gerne wisssen wie ich die Exception löse. Mein Arbeitskollege ist auch überfragt...
Die Exception tritt auf wenn er in ein Unterverzeichnis möchte...

haentschman 10. Nov 2015 13:08

AW: Rekursiv Suchen
 
Welche Zeile / Anweisung? Wie sind die Werte der Parameter? An welchem Datum ist Weihnachten? :roll:

GroZ 10. Nov 2015 13:14

AW: Rekursiv Suchen
 
Zitat:

Zitat von haentschman (Beitrag 1321003)
Welche Zeile / Anweisung? Wie sind die Werte der Parameter? An welchem Datum ist Weihnachten? :roll:

Delphi-Quellcode:
repeat
          if (X.Name <> '.') and (X.Name <> '..') and ((X.Attr and faDirectory) <> 0) then
          begin  //Geht hier nicht rein
            Result:=VerzeichnisMitFRPzuPDF(ExtractFilePath(PfadUndDateimaske)+X.Name+'\'+ExtractFileName(PfadUndDateimaske),SubDirs);
            if not Result then
              break;
          end;
        until FindNext(X) <> 0;
Hier springt er im Debugmodus von repeat zu until.
Dann kommt halt die Exception.
Die Parameterwerte sind ein einfaches Verzeichnis 'C:\Files\FRP\2010\September' beispielsweise.
Der Ordner besteht aus 8 FRP Dateien 1 Ordner in dem befinden sich 3 FRP Dateien und noch 1 Ordner der auch 3 FRP Dateien beinhaltet.
Weihnachten ist am 24.12. :lol:

baumina 10. Nov 2015 13:22

AW: Rekursiv Suchen
 
EDIT : ** gelöscht **

GroZ 10. Nov 2015 13:25

AW: Rekursiv Suchen
 
Zitat:

Zitat von baumina (Beitrag 1321005)
liegt wohl am
Delphi-Quellcode:
(X.Attr and faDirectory) <> 0

Habs durch
Delphi-Quellcode:
= 0
ersetzt. Jetzt kommt zwar keine Exception aber er schließt einfach.
Sprich das Unterverzeichnis wird immer noch nicht angerührt

TiGü 10. Nov 2015 13:28

AW: Rekursiv Suchen
 
Zitat:

Zitat von GroZ (Beitrag 1321007)
Zitat:

Zitat von baumina (Beitrag 1321005)
liegt wohl am
Delphi-Quellcode:
(X.Attr and faDirectory) <> 0

Habs durch
Delphi-Quellcode:
= 0
ersetzt. Jetzt kommt zwar keine Exception aber er schließt einfach.
Sprich das Unterverzeichnis wird immer noch nicht angerührt

Baumina meinte das sicher anderes.
Wie sieht denn dein Call Stack aus?

Ungefähr so?
Code:
:77712312 ntdll.RtlEnterCriticalSection + 0x12
:758ca25d KERNELBASE.FindNextFileW + 0x46
:00420704 FindNext + $10
FRPtoPDF.FRPtoPDF
:76f5337a kernel32.BaseThreadInitThunk + 0x12
:77729882 ntdll.RtlInitializeExceptionChain + 0x63
:77729855 ntdll.RtlInitializeExceptionChain + 0x36

GroZ 10. Nov 2015 13:30

AW: Rekursiv Suchen
 
Zitat:

Zitat von TiGü (Beitrag 1321008)
Zitat:

Zitat von GroZ (Beitrag 1321007)
Zitat:

Zitat von baumina (Beitrag 1321005)
liegt wohl am
Delphi-Quellcode:
(X.Attr and faDirectory) <> 0

Habs durch
Delphi-Quellcode:
= 0
ersetzt. Jetzt kommt zwar keine Exception aber er schließt einfach.
Sprich das Unterverzeichnis wird immer noch nicht angerührt

Baumina meinte das sicher anderes.
Wie sieht denn dein Call Stack aus?

Ungefähr so?
Code:
:77712312 ntdll.RtlEnterCriticalSection + 0x12
:758ca25d KERNELBASE.FindNextFileW + 0x46
:00420704 FindNext + $10
FRPtoPDF.FRPtoPDF
:76f5337a kernel32.BaseThreadInitThunk + 0x12
:77729882 ntdll.RtlInitializeExceptionChain + 0x63
:77729855 ntdll.RtlInitializeExceptionChain + 0x36

Tut mir leid für die blöde Frage aber was ist ein Call Stack und wo sehe ich den? Hab davon noch nie was gehört :? :oops:

TiGü 10. Nov 2015 13:35

AW: Rekursiv Suchen
 
Zitat:

Zitat von GroZ (Beitrag 1321010)
Tut mir leid für die blöde Frage aber was ist ein Call Stack und wo sehe ich den? Hab davon noch nie was gehört :? :oops:

Sagt dir der Begriff Aufruf-Stack etwas?

Schaue mal in diesen kostenlosen PDF auf Seite 147:
http://downloads.delphi-treff.de/DelphiStarter.pdf

Wenn du das Fenster nicht kennst dann probiere doch mal in der IDE Menü -> Ansicht -> Debug Fenster -> Aufruf-Stack.

GroZ 10. Nov 2015 13:42

AW: Rekursiv Suchen
 
Muss ich das irgendwie aktivieren? Weil bei mir steht nur "Auf den Prozess kann nicht zugegriffen werden"
Oder mache ich etwas falsch?

TiGü 10. Nov 2015 13:52

AW: Rekursiv Suchen
 
Zitat:

Zitat von GroZ (Beitrag 1321014)
Muss ich das irgendwie aktivieren? Weil bei mir steht nur "Auf den Prozess kann nicht zugegriffen werden"
Oder mache ich etwas falsch?

Nur wenn das Programm läuft und in einen Haltepunkt gelaufen ist oder wahlweise wenn eine Exception hochploppt.
Also NICHT im "Programmiermodus" (normales Layout).

GroZ 10. Nov 2015 14:01

AW: Rekursiv Suchen
 
bin anscheinend zu doof dazu...
sobald ich das Programm starte geht das Fenster weg und erst wenn ich STRG+F2 drücke nach der Exception kommt das wieder. Trotzdem steht da noch nix drin..

baumina 10. Nov 2015 14:13

AW: Rekursiv Suchen
 
Also ich denke, dass wenn du z.B. nach "C:\temp\*.FRP" mit FindNirst/FindNext suchst, dass du die Unterverzeichnisse damit nicht erwischen kannst.

Deine repeat-Schleife müsst eigentlich ohne Exception durchlaufen.

Die Exception kann ich mir eigenlich nur bei diesem Block vorstellen:
Delphi-Quellcode:
  try
     PDFExport.ShowDialog := false;
     frReport.ShowProgress := false;
     try
       frReport.LoadPreparedReport(AFRPFile);
       frReport.ExportTo(PDFExport, APDFFile);
     except
       exit;
     end;

   finally
     PDFExport.Free;
     frReport.Free;
   end;
Hier mal nen Haltepunkt und mit F8 durchsteppen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr.
Seite 1 von 2  1 2      

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