AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem beim Dateiensuchen -> Unicode + Gesperrte Ordner
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Dateiensuchen -> Unicode + Gesperrte Ordner

Offene Frage von "ThE_-_BliZZarD"
Ein Thema von ThE_-_BliZZarD · begonnen am 11. Mai 2007 · letzter Beitrag vom 14. Mai 2007
Antwort Antwort
ThE_-_BliZZarD

Registriert seit: 15. Sep 2006
Ort: Wiesbaden/Hessen
89 Beiträge
 
Delphi 2010 Professional
 
#1

Problem beim Dateiensuchen -> Unicode + Gesperrte Ordner

  Alt 11. Mai 2007, 23:02
Ich führe ein Dateilisting mit folgender Methode durch.
Leider habe ich auf meiner Festplatte ein paar Dateien und ORDNER, deren Dateiname oder Ordnername
Unicode (Japanische Schriftzeichen) enthält. Das Listing versucht den Ordner zu öffnen, öffnet sich aber immer wieder
selbst (rekursiv..) und fährt sich dort fest.

Das gleiche passiert mit einem Systemordner, der ebenfalls "für den Publikumsverkehr geschlossen" ist.^^

Wie kann ich diese Fehler abfangen? Gibt es eine Funktion die Unicode erkennt? Und eine die blöde
nicht öffnen-bare Ordner erkennt?

Funktion (Ausschnitt):
Delphi-Quellcode:
if FindFirst('*', faAnyFile, searchResult) = 0 then
  begin
    repeat
      Application.ProcessMessages;
      SetLength(ergebnisse, (Length(ergebnisse)+1));

      if ((searchResult.Attr and faDirectory) = faDirectory) then begin
         ergebnisse[i].is_directory := true;
         ergebnisse[i].name := searchResult.Name;
         ergebnisse[i].size := 0;
      end
      else begin
         ergebnisse[i].is_directory := false;
         ergebnisse[i].name := searchResult.Name;
         ergebnisse[i].size := searchResult.Size;
      end;
      Application.ProcessMessages;
      Inc(i);
    until FindNext(searchResult) <> 0;

    FindClose(searchResult);
end;
Edit: ich weiß, die Rekusivität is hier nicht zu sehen, aber hier in der if müsste etwas hin was diese blöden Sachen abfängt.
MSVC2008 (C/C++ with QT), Delphi RAD 2010, Flash CS5 (FDT/Adobe), Java EE (Eclipse), PHP5
Antwortsprachen: Deutsch, Englisch, Französisch, Japanisch
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Problem beim Dateiensuchen -> Unicode + Gesperrte Ord

  Alt 11. Mai 2007, 23:06
Du musst die Unicode API-Funktionen verwenden. Die VCL unterstützt so kein Unicode. Entweder nimmst du die TNT-Unicode Controls mit der TNT Unicode API Unterstützung oder du die entsprechenden Funktionen (FindFirstFileW) direkt (Sind schon in der Windows.pas deklariert.)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ThE_-_BliZZarD

Registriert seit: 15. Sep 2006
Ort: Wiesbaden/Hessen
89 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Problem beim Dateiensuchen -> Unicode + Gesperrte Ord

  Alt 11. Mai 2007, 23:10
Also die FindFirst durch "FindFirstFileW" ersetzen?

Und die FindNext durch "FindNextFileW" oder was? muss ich was beachten? weil ich der Delphi7Hilfe stehen die Funktionen nicht


Und was is mit dem Drecks-Systemordner?

Danke
MSVC2008 (C/C++ with QT), Delphi RAD 2010, Flash CS5 (FDT/Adobe), Java EE (Eclipse), PHP5
Antwortsprachen: Deutsch, Englisch, Französisch, Japanisch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Problem beim Dateiensuchen -> Unicode + Gesperrte Ord

  Alt 11. Mai 2007, 23:54
Zitat von ThE_-_BliZZarD:
Und die FindNext durch "FindNextFileW" oder was? muss ich was beachten? weil ich der Delphi7Hilfe stehen die Funktionen nicht
Also mein D7 kennt FindNextFile (Menü > Hile > Windows SDK).
nur wie Luckie schon sagte hat's die VCL nicht so mit'm Unicode und da die von Borland Konsequent sind, gibt's auch fast kein Unicode in der WinAPI-Hilfe. (OK, im MSDN gibt's davon och nicht viel)

Allerdigns sind die Befehle gleich den ANSI-Versionen aufgebaut, nur halt die String als Wide...

oder du schaust einfach mal ins MSDN > MSDN-Library durchsuchenFindNextFileW

[add]
ich hoffe du hast i initialisiert?

Ansonsten ... wenn ich i umstelle und den Code kürze, dann kommt ja dieses raus
und einen Fehler kann ich da nicht entdecken, jedenfalls keinen welcher der ein "Festfahren"? erklären würde.
Delphi-Quellcode:
if FindFirst('*', faAnyFile, searchResult) = 0 then
  begin
    repeat
      i := Length(ergebnisse);
      SetLength(ergebnisse, i + 1);
      ergebnisse[i].is_directory := (searchResult.Attr and faDirectory) = faDirectory;
      ergebnisse[i].name := searchResult.Name;
      ergebnisse[i].size := 0;
    until FindNext(searchResult) <> 0;
    FindClose(searchResult);
end;
Zitat:
Das Listing versucht den Ordner zu öffnen, öffnet sich aber immer wieder
selbst (rekursiv..) und fährt sich dort fest.
Aber wo ist hier was rekursiv und wo wird was geöffnet?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ThE_-_BliZZarD

Registriert seit: 15. Sep 2006
Ort: Wiesbaden/Hessen
89 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Problem beim Dateiensuchen -> Unicode + Gesperrte Ord

  Alt 12. Mai 2007, 14:06
na, ich poste hier mal den kompletten Code.. ^^

Delphi-Quellcode:
function GetDirContents(pfad: String; prestr: String): Integer;
var
   searchResult : TSearchRec;
   ergebnisse: TSRDynArray;
   SL, tmp: TStringlist;
   i, j: integer;
begin
  i := 0;
  j := 0;

  SetLength(ergebnisse, 0);
  SetCurrentDir(pfad);

  FMain.AppendStringToFile(prestr+' Verzeichnis von '+pfad, pfad_zur_liste);
  FMain.AppendStringtoFile(prestr+' ', pfad_zur_liste);

  if FindFirst('*', faAnyFile, searchResult) = 0 then
  begin
    repeat
      Application.ProcessMessages;
      SetLength(ergebnisse, (Length(ergebnisse)+1));

      if ((searchResult.Attr and faDirectory) = faDirectory) then begin
         ergebnisse[i].is_directory := true;
         ergebnisse[i].name := searchResult.Name;
         ergebnisse[i].size := 0;
      end
      else begin
         ergebnisse[i].is_directory := false;
         ergebnisse[i].name := searchResult.Name;
         ergebnisse[i].size := searchResult.Size;
      end;
      Application.ProcessMessages;
      Inc(i);
    until FindNext(searchResult) <> 0;

    // Must free up resources used by these successful finds
    FindClose(searchResult);
    for i := 0 to (Length(ergebnisse)-1) do begin
       Application.ProcessMessages;
       if (ergebnisse[i].is_directory) then begin
          if ((ergebnisse[i].name <> '.') AND (ergebnisse[i].name <> '..')) then begin
            Application.ProcessMessages;
            GetDirContents(pfad+ergebnisse[i].name+'\', prestr+' ');
            SetCurrentDir(pfad);
          end;
       end
       else begin
          Application.ProcessMessages;
          FMain.AppendStringtoFile(prestr+' - '+ergebnisse[i].name+' '+IntToStr(ergebnisse[i].Size)+' Bytes', pfad_zur_liste);
       end;
    end;
    Application.ProcessMessages;
    FMain.AppendStringtoFile(prestr+' ', pfad_zur_liste);
  end
  else begin
     FMain.AppendStringtoFile(prestr+' Keine Elemente.', pfad_zur_liste);
     FMain.AppendStringtoFile(prestr+' ', pfad_zur_liste);
  end;
  Result := 0;
end;
Hier wird die Funktion aufgerufen:
GetDirContents('F:\', '');
MSVC2008 (C/C++ with QT), Delphi RAD 2010, Flash CS5 (FDT/Adobe), Java EE (Eclipse), PHP5
Antwortsprachen: Deutsch, Englisch, Französisch, Japanisch
  Mit Zitat antworten Zitat
ThE_-_BliZZarD

Registriert seit: 15. Sep 2006
Ort: Wiesbaden/Hessen
89 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Problem beim Dateiensuchen -> Unicode + Gesperrte Ord

  Alt 14. Mai 2007, 18:17
Hat keiner eine Idee?

Und das mit den WinAPI Funktionen hab ich nicht ganz verstanden.. Kann das jemand mal bitte etwas genauer erläutern?

Was muss ich tun damit Unicode verwendet werde kann?
MSVC2008 (C/C++ with QT), Delphi RAD 2010, Flash CS5 (FDT/Adobe), Java EE (Eclipse), PHP5
Antwortsprachen: Deutsch, Englisch, Französisch, Japanisch
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Problem beim Dateiensuchen -> Unicode + Gesperrte Ord

  Alt 14. Mai 2007, 22:17
Zitat von ThE_-_BliZZarD:
Hat keiner eine Idee?

Und das mit den WinAPI Funktionen hab ich nicht ganz verstanden.. Kann das jemand mal bitte etwas genauer erläutern?

Was muss ich tun damit Unicode verwendet werde kann?
Zitat von Luckie:
... oder du die entsprechenden Funktionen (FindFirstFileW) direkt (Sind schon in der Windows.pas deklariert.)
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:21 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