Announcement

Collapse
No announcement yet.

filelisting

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • filelisting

    hallo..wie kann ich sämtliche files auf einer partition inkl. verzeichnisstruktur in eine datei ausgeben? danke für eine antwort!

  • #2
    ja, ja, früher kannte man noch DOS:-))

    dir c: /S > view.tx
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      hmmm..kann man heute auch noch, nur brauche ich zu jedem file die komplette verzeichnisstruktur. in diesem fall müsste ich einen import konverter schreiben, der mir aus

      "verzeichnis von c:\dos\

      ansi.sys
      command.com
      edit.com
      ...."

      "c:\dos\ansi.sys
      c:\dos\command.com
      c:\dos\edit.com"

      bastelt. kann man hier nicht mit FindNext was erreichen? es geht wie gesagt darum, files und directories in einer verarbeitbaren form auszugeben..

      Comment


      • #4
        Hallo,

        Du müsstest dir ne procedure schreiben und diese rekursiv aufrufen. (ich arbeite an einem BSP).

        Kommt gleich.

        Gruß Andr

        Comment


        • #5
          Also so würde ich das tun:

          // Verzeichnisse suchen ab Startpfad
          procedure DirRecu(start :String; Verzeichnis:TStrings);
          Var VInfo : TSearchRec;
          Verz : String;
          begin
          Start:=Trim(Start);
          if Start[Length(Start)]<>'\' then begin
          Start:=Start+'\';
          end;
          if FindFirst(start+'*.*',faDirectory, VInfo) = 0 then begin
          repeat
          if VInfo.Attr and faDirectory <> 0 then begin
          if (VInfo.Name<>'.') and (VInfo.Name<>'..') then begin
          Verz:=Start+VInfo.Name+'\';
          Verzeichnis.Add(Verz);
          DirRecu(Verz,Verzeichnis);
          end;
          end; { end if Directory }
          until FindNext(VInfo) <> 0;
          end;
          FindClose(VInfo);
          end;

          // Dateien aus mittels einer Verzeichnisliste suchen
          function FFiles(Maske :String;DirListe :TStrings):TStrings;
          Var
          FileInfo : TSearchRec;
          VCount : LongInt;
          begin
          Result:=TStringlist.Create; { Result erstellen }
          try
          for VCount:=0 to DirListe.Count-1 do begin
          { für alle in Dirliste vorhandenen Verz. }
          if FindFirst(DirListe.Strings[VCount]+Maske,faArchive, FileInfo) = 0 then begin
          repeat
          Result.Add(DirListe.Strings[VCount]+FileInfo.Name);
          Until FindNext(FileInfo) <> 0;
          end;
          FindClose(FileInfo);
          end;
          except
          Result.Free;
          end;
          end;

          // eine Fkt um beides zu kombinieren
          function FindFilesRecu(FName, Startpfad :String):TStrings;
          Var
          TempDirList : TStrings;
          begin
          Result:=TStringlist.Create; { Ergebnisvar erzeugen}
          try
          TempDirList:=TStringlist.Create; { Directory liste erzeugen }
          DirRecu(Startpfad,TempDirList); { Dirlist erzeugen }
          Result:=FFiles(FName,TempDirList); { FileList erzeugen }
          except
          Result.Free;
          end;
          end;

          // Aufruf wäre dann zb:
          Memo.Lines.AddStrings(FindFilesRecu('*.exe','C:')) ;

          Ich hoffe das hilft dir weiter.

          Gruß Andr

          Comment


          • #6
            du bist der grösste ;-)
            funktioniert und hilft mir enorm weiter!!!
            danks

            Comment


            • #7
              Hi,
              anscheinend doch nicht ;-)
              Ich würde sagen das ist um einiges kürzer: dir c: /B /S > view.txt

              Gruß Fal
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                ..........und wie bekomme ich das ergebnis in ein array geladen ohne den file danach öffnen zu müssen? wie kann ich aus delphi überhaupt einen dos-dir befehl aufrufen? ist doch in der command.com implementiert!? geht da nicht generell was über win-apis? grüsse.

                Comment


                • #9
                  hi andre...irgendwie werden bei deinem beispiel nicht alle files herangezogen..hab versucht herauszufinden, woran es liegt..konnte aber noch keine 'unschärfe' entdecken..die anzahl der gefundenen dirs stimmt, nur die anzahl der gefundenen files ist zu klein....

                  Comment


                  • #10
                    Hallo,

                    ich schaue mir das BSP nochmal an,
                    mal kucken ob ich da ein fehler drin habe.

                    zu der Antwort von Falk du kannst einen befehl über ExecuteFile() ausführen.
                    ist in der Unit "fmxutils.pas" zu finden. Du kannst eine Option setzten ob der ausgeführte
                    prozess angezeigt werden soll.

                    Aufruf wäre so:
                    je nach Betriebsystem mußt du "cmd.exe" bzw "command.com" angeben
                    ExecuteFile('cmd.exe','/c dir c:\*.exe /s','',1);

                    Gruß Andr

                    Comment


                    • #11
                      Hallo,

                      Sorry war noch etwas bugy.

                      Die zwei Fkt. habe ich geändert mußt du ersetzten:

                      procedure DirRecu(start :String; Verzeichnis:TStrings);

                      Var VInfo : TSearchRec;

                      Verz : String;

                      begin

                      Start:=Trim(Start);

                      if Start[Length(Start)]<>'\' then begin

                      Start:=Start+'\';

                      end;

                      Verzeichnis.Add(Start);

                      if FindFirst(start+'*.*',faDirectory, VInfo) = 0 then begin

                      repeat

                      if VInfo.Attr and faDirectory <> 0 then begin

                      if (VInfo.Name<>'.') and (VInfo.Name<>'..') then begin

                      Verz:=Start+VInfo.Name+'\';

                      DirRecu(Verz,Verzeichnis);

                      end;

                      end; { end if Directory }

                      until FindNext(VInfo) <> 0;

                      end;

                      FindClose(VInfo);

                      end;

                      function FFiles(Maske :String;DirListe :TStrings):TStrings;

                      Var

                      FileInfo : TSearchRec;

                      VCount : LongInt;

                      begin

                      Result:=TStringlist.Create; { Result erstellen }

                      try

                      for VCount:=0 to DirListe.Count-1 do begin

                      { für alle in Dirliste vorhandenen Verz. }

                      if FindFirst(DirListe.Strings[VCount]+Maske,faAnyFile, FileInfo) = 0 then begin

                      repeat

                      If (FileInfo.Attr and faVolumeID = 0) and (FileInfo.Attr and faDirectory = 0) then begin

                      // keine VolID & Keine Verzeichnisse ausgeben

                      Result.Add(DirListe.Strings[VCount]+FileInfo.Name);

                      end;

                      Until FindNext(FileInfo) <> 0;

                      end;

                      FindClose(FileInfo);

                      end;

                      except

                      Result.Free;

                      end;

                      end;

                      Das lag zum ersten an den Dateiattributen Readonly usw.
                      und an der Verzeichnisliste das Startverz. habe ich nicht mit durchsucht.

                      Zur Kontrolle "dir *.* /a-d /s" im entspr. Startverzeichnis aufrufen.

                      Gruß Andr

                      Comment


                      • #12
                        super..jetzt bekommt er alle!
                        das mit dem startdirectory hatte ich noch selbst bemerkt..aber die attribute sind mir entgangen...danks!!

                        Comment

                        Working...
                        X