AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi dateinamen in einem Ordner abfragen??
Thema durchsuchen
Ansicht
Themen-Optionen

dateinamen in einem Ordner abfragen??

Ein Thema von erniepb · begonnen am 11. Jun 2002 · letzter Beitrag vom 27. Jun 2003
Antwort Antwort
Seite 1 von 2  1 2      
erniepb

Registriert seit: 8. Jun 2002
Ort: Berlin
96 Beiträge
 
Delphi 7 Enterprise
 
#1

dateinamen in einem Ordner abfragen??

  Alt 11. Jun 2002, 23:02
Hallöchen...
Hab folgendes Problem .. wie frage ich die Dateien in einem beliebigen Ordner ab ?? Momentan benutz ich die FileListBoxKomponente .. aber so ganz das wahre ist das ja wohl nich .. gibts da vielleicht noch n elegantere Möglichkeit ?? weil die FileListbox existiert nur aus diesem einen Grund ..

Danke !!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 11. Jun 2002, 23:06
Moin Ernie,

was hast Du denn genau vor?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
erniepb

Registriert seit: 8. Jun 2002
Ort: Berlin
96 Beiträge
 
Delphi 7 Enterprise
 
#3
  Alt 11. Jun 2002, 23:14
also ich suche eigentlich nach selbst erstellten Dateien des Typs '.fct' mit einer 8stelligen Zahl davor ( z.B. '10000000.fct') .. das sind Dateien die temporäre Wertetabellen enthalten um den Arbeitsspeicher zu entlasten .. aber das nur nebenbei .. Ziel ist es einen neuen noch verfügbaren numerischen Dateinamen zu finden ..

meine Momentane Funktion die Ordner und Dateinamen zurückgibt, sieht so aus:

Code:
function TFormFileManagement.GetAvailableTemporaryValueChartAddress(Directory: String): String;
 const
  SubDirectory = '\save';
 var
  i1 : LongInt;
  FileNumber : LongInt;
  FileName : String;
 begin
  FileListBox.ApplyFilePath(Directory + SubDirectory);
  FileListBox.Update;
  i1 := 0;
  FileNumber := 10000000;

  If FileListBox.Items.Count > 0 Then
   repeat
    If (IntToStr(FileNumber) + '.fct') = FileListBox.Items[i1] Then
     Begin
      i1 := -1;
      FileNumber := FileNumber + 1;
     End;
    i1 := i1 + 1;
   until i1 = FileListBox.Items.Count;
  FileName := IntToStr(FileNumber) + '.fct';

  If SubDirectory <> '' Then
   GetAvailableTemporaryValueChartAddress := Directory + SubDirectory + '\' + Filename
  Else GetAvailableTemporaryValueChartAddress := Directory + SubDirectory + Filename;
 end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 11. Jun 2002, 23:19
Um eine Datei zu finden kannst du folgenden Code verwenden. Mit dem gleichen Prinzip, nur etwas anpassen halt.

Code:
function suchdatei(pfad,datei:string):string;
var
  sr:TSearchRec;
begin
  result:='';
  if findfirst(pfad+'*.*',$27,sr)=0 then
    repeat
      if ansilowercase(sr.name)=ansilowercase(datei) then
      begin
        result:=pfad+datei;
        break;
      end;
    until findnext(sr)<>0;
  FindClose(Sr);
end;

function finden(start,datei:string):string;
var
  sr:TSearchRec;
  hlp:string;
begin
  if ansilastchar(start)<>'\' then
    start:=start+'\';
  result:=suchdatei(start,datei);
  if result <> '' then exit;
  if findfirst(start+'*.*',faAnyfile,sr)=0 then
  begin
    repeat
      if (sr.Attr and faDirectory > 0)and(sr.name[1]<>'.') then
      begin
        hlp:=start+sr.name;
        result:=finden(hlp,datei);
        if result <> '' then break;
      end;
    until findnext(sr)<>0;
  FindClose(Sr);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  Ergebnis,Startverzeichnis,Dateiname:string;
begin
  Startverzeichnis:='C:';
  Dateiname:='Error.wav';
  screen.cursor:=crhourglass;
  Ergebnis:=finden(Startverzeichnis,Dateiname);
  if Ergebnis <> '' then
    showmessage(Ergebnis)
  else
    showmessage('Nicht gefunden');
  screen.cursor:=crdefault;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
erniepb

Registriert seit: 8. Jun 2002
Ort: Berlin
96 Beiträge
 
Delphi 7 Enterprise
 
#5
  Alt 11. Jun 2002, 23:31
Hey danke .. das hilft .. muss zwar n bisschen was ändern aber es hilft
Windows Unser, der Du steuerst Rechner,
Geheiligt seien Deine Fenster. [...]
Dein Crash komme, Dein Wille geshehe.
Denn Dein ist der RAM, die Harddisk und die CPU-Zeit, in Ewigkeit Alt-F4.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 12. Jun 2002, 08:49
Hi,

ich habe noch eine kleine Anmerkung zu Luckies Code

Luckie testet, ob der Datei-/Verzeichnisname mit einem Punkt anfängt, übersieht jedoch den Fakt, das dieses sogar legitim ist, auch wenn der Explorer selbst das nicht zulässt. Von daher möchte ich noch folgenden Code vorschlagen. (Zusätzlich sind Datei- und Verzeichnissuche miteinander verbunden, die Liste ist unsortiert.)

Desweiteren habe ich noch einen try...finally...end Block eingesetzt, welcher garantiert, dass FindClose aufgerufen wird, um die von FindFirst belegten Ressourcen wieder freizugeben.

Code:
procedure FindFiles(Directory: String; Recurse: Boolean; List: TStrings);
var
  Res: Integer;
  SR: TSearchRec;
begin
  if AnsiLastChar(Directory)^ <> '\' then
    Directory := Directory + '\';
  Res := FindFirst(Directory + '*.*', faAnyFile, SR); try
  if Res = 0 then
  repeat
    if (SR.Name <> '.') and (SR.Name <> '..') then
      if SR.Attr and faDirectory = 0 then
        List.Add(Directory + SR.Name)
      else if Recurse then
        FindFiles(Directory + SR.Name, True, List);
  until FindNext(SR) <> 0;
  finally FindClose(SR);
end;
Ich habe den Code in dieser Form nicht getestet, er sollte aber funktionieren - mehr oder weniger

Parameterliste
  • Directory - Startverzeichnis für die Dateisuche
  • Recurse - True um Unterverzeichnisse nach Dateien zu durchsuchen
  • List - Ein String List (z.B. TStringList), welche die gefundenen Dateien aufnimmt.

Ich hoffe, dass das auch ein wenig hilft.

P.S. Luckie: Nicht böse sein
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 12. Jun 2002, 11:18
Moin Zusammen,

dann will ich noch mal meine Methode alle Dateien eines Verzeichnisses auszulesen beisteuern. Um einen Parameter zu sparen als Methode des Formulares.

Code:
procedure TForm1.GetFiles(const p_sRootDir : string;const p_slResult : TStrings);

var
  lb : TListBox;

begin
  lb := TListBox.CreateParented(self.Handle);
  try
    SendMessage(lb.Handle,LB_DIR,DDL_ARCHIVE or DDL_HIDDEN or DDL_READONLY or DDL_READWRITE or DDL_SYSTEM,lParam(PChar(p_sRootDir+'\*.*')));
    p_slResult.AddStrings(lb.Items);
  finally
    FreeAndNil(lb);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetFiles('c:\winnt\system32',Memo1.Lines);
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#8
  Alt 12. Jun 2002, 11:33
Hallo Christian,

interessante Lösung. Ist diese Lösung auch rekursiv? Soll heißen: liefert LB_DIR auch die Dateien der Unterverzeichnisse?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#9
  Alt 12. Jun 2002, 11:44
Hi,

funktioniert das ganze auch mit Dateien ohne Name?
z.B.: .htaccess

Grüsse, Daniel
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#10
  Alt 12. Jun 2002, 11:51
Moin Mr. Spock,

die Lösung ist meines Wissens nicht rekursiv, sondern eher als Basis für ein iteratives Durchsuchen geeignet.
Ausserdem dürfte LB_DIR auch die Basis für die FileListBox sein.
Werden andere Flags gesetzt, lassen sich auch direkt enthaltene Unterverzeichnisse bzw. Laufwerke anzeigen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:52 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