AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Festplattenzugriffe

Ein Thema von Slavik · begonnen am 20. Nov 2004 · letzter Beitrag vom 24. Nov 2006
Antwort Antwort
Seite 5 von 7   « Erste     345 67      
Benutzerbild von Mackhack
Mackhack

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

Re: Festplattenzugriffe

  Alt 3. Sep 2006, 21:17
Zitat von Luckie:
Es hat sich Gott sei dank erledigt. das Programm wird jetzt über den Taskplaner nachts gestartet oder eben manuell.
Hi Luckie,

ich weis dass du das wohl nicht mehr brauchst aber ich habe 2 interessante Dinge gefunden die dich vlt. (doch) noch interessieren zu deinem damaligen Problem:

Eric Gunnerson's C# Compendium

Und aus der MSDN:
Zitat:
ReadDirectoryChangesW fails with ERROR_INVALID_PARAMETER when the buffer length is greater than 64 KB and the application is monitoring a directory over the network. This is due to a packet size limitation with the underlying file sharing protocols.
Quelle:
ReadDirectoryChangesW
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
Benutzerbild von himitsu
himitsu

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

Re: Festplattenzugriffe

  Alt 4. Sep 2006, 13:20
Das ERROR_INVALID_PARAMETER könnte ein Problem erklären ... ich laß inzwischen den entsprechenden Thread mit erhöhter Priorität laufen und schon geht es, nur kommt jetzt hinzu, daß man nur den Datei-/Verzeichnisnamen bekommt, was bei WatchSubtree=True zu problemen führt, man erfährt leider nicht wo in dem ganzen Verzeichnisbaum die Datei liegt.



Da darf man ja dennoch alles durchsuchen und eindeutiger wird es erst recht nicht, wenn mehrere Dateien mit dem selben Namen existieren.

Praktisch könnte man jetzt zwar für jedes Unterverzeichnis einzeln eine Überwachung einrichten, nur könnte man dann keine Verzeichnisse mehr löschen, da diese ja geöffnet wären. (abgesehen von den Unmassen an Handles und Überwachungsthreads)
Und wenn man eh alles durchsuchen muß, wäre diese ReadDirectoryChangesW doch schon fast nurtzlos.



Zu "Eric Gunnerson's C# Compendium" schön daß man jetzt anscheinend auch noch auf die kurzen Dateinamen achten muß
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#43

Re: Festplattenzugriffe

  Alt 4. Sep 2006, 16:38
Moin Zusammen,

ich habe hier mal ein Demoprojekt für die asynchrone Verwendung von ReadDirectoryChangesW angehängt.
Das Projekt ist (wie ich denke ) vollständig dokumentiert.

Zwei Punkte noch vorab, auch wenn sie bereits in der Dokumentation stehen:
  1. Das Ereignis, das bei einer überwachten Veränderung ausgelöst wird, wird immer zweimal hintereinander mit identischem Ergebnis ausgelöst.
    (einen Thread zur Ursache hatte ich auch schon einmal hier eröffnet: ReadDirectoryChangesW wird mehrfach ausgelöst. Warum?).
    Soweit ich bislang feststellen konnte handelt es sich hierbei im ein Problem der Funktion selber, und ist nicht delphispezifisch.
  2. Die Pfadangaben die man zurückerhält sind immer relativ zum überwachten Verzeichnis zu sehen.
    Dies muss man immer vor die einzelnen Ergebnisse setzen.


Suchbegriffe, damit in der Demo enthaltene Begriffe über die Suche gefunden werden können:
ReadDirectoryChangesW, CreateIoCompletionPort, GetQueuedCompletionStatus, FILE_NOTIFY_INFORMATION, OVERLAPPED, WC_NO_BEST_FIT_CHARS, FILE_LIST_DIRECTORY

[EDIT]
Fehler in Demo korrigiert
[/EDIT]

[EDIT2]
Demo erneut korriert
[/EDIT2]
Angehängte Dateien
Dateityp: zip readdirectorychangesw_demo_107.zip (5,2 KB, 64x aufgerufen)
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 Mackhack
Mackhack

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

Re: Festplattenzugriffe

  Alt 4. Sep 2006, 20:49
Hallo Christian,

vielen Dank fuer das Demo. Musst nur in der Zeile 193
FsResult := FsPath + '\' + FsResult; den Backslash rausmachen da man sonst Sachen wie C:\\xxxxx bekommt.

Und warum sind im Memo hinter den FileNames immer "???"?
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
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#45

Re: Festplattenzugriffe

  Alt 4. Sep 2006, 21:05
Schau dir mal die windows-registry an, wie viele doppelte backslashes du da drin hast

das hinzufügen des backslash ist sehr viel einfacher als es durch IncludeTrailingPathDelimiter zu jagen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  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
 
#46

Re: Festplattenzugriffe

  Alt 4. Sep 2006, 21:08
Zitat von DGL-luke:
Schau dir mal die windows-registry an, wie viele doppelte backslashes du da drin hast

das hinzufügen des backslash ist sehr viel einfacher als es durch IncludeTrailingPathDelimiter zu jagen.
Warum IncludeTrailingPathDelimiter nutzen? Der Backslash den ich meinte ist doch am Anfang!
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
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#47

Re: Festplattenzugriffe

  Alt 4. Sep 2006, 22:42
Moin Mackhack,

woher die ??? kommen kann ich mir im Moment auch nicht erklären, denn bei mir treten sie nicht auf.
Kannst Du mal ein Beispiel dafür angeben, was Du überwacht hast und mit welchem NotifyFilter?
Ausserdem könnte noch das Betriebssystem wichtig sein.

Den zusätzlichen Backslash hast Du übrigens nur, wenn Du ein Laufwerk angibst. Wenn Du ein Verzeichnis nimmst, tritt das nicht auf.
Für Windows spielt übrigens die Anzahl aufeinanderfolgender Pfadtrennzeichen keine Rolle, sie werden immer als einer gewertet.
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 Mackhack
Mackhack

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

Re: Festplattenzugriffe

  Alt 4. Sep 2006, 23:00
Hi,

also hier mal die Daten und ein Beispielauszug aus dem Memo.

Windows XP Media Center Edition English SP2
Filter: FILE_NOTIFY_CHANGE_LAST_WRITE
Ueberwachung: C:\
File aus Memo: C:\\Documents and Settings\{USERNAME}\Application Data\{ANWENDUNG}\{ANWENDUNG}.statistics.bak????
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
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#49

Re: Festplattenzugriffe

  Alt 4. Sep 2006, 23:14
Moin Mackhack,

ich glaube ich habe den Fehler gefunden:

Ein SetLength steht an der falschen Stelle

Delphi-Quellcode:
          // Falsch
          if iLen = 0 then begin
            FsResult := 'ERROR';
          end else begin
            FsResult := FsPath + '\' + FsResult;
            SetLength(FsResult,iLen);
          end;


          // Richtig
          if iLen = 0 then begin
            FsResult := 'ERROR';
          end else begin
            SetLength(FsResult,iLen);
            FsResult := FsPath + '\' + FsResult;
          end;
So 'was Blödes

Ausserdem habe ich noch etwas gefunden:

Da der Dateiname in der Struktur FILE_NOTIFY_INFORMATION (wFilename) ja vom Typ WChar ist, kann die Längenangabe verkleinert werden:

Delphi-Quellcode:
  FILE_NOTIFY_INFORMATION = packed record
    dwNextEntryOffset : DWORD;
    dwAction : DWORD;
    dwFileNameLength : DWORD;
    wFilename : array [1.._iFilenameLength shr 1] of WCHAR; // shr 1 ist neu
  end;

[EDIT]
Korrgierte Demo hochgeladen
BUG: SetLength in der falschen Zeile
BUG: Länge von wFilename in FILE_NOTIFY_INFORMATION
[/EDIT]

[EDIT2]
Demo erneut korriert
BUG: Man sollte auch den Buffer für das Ergebnis (FNI) initialisieren
BUG: Länge von wFilename in FILE_NOTIFY_INFORMATION. Wenn ich durch 2 teilen will sollte ich wohl besser nicht shr 2 nehmen
[/EDIT2]
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 Mackhack
Mackhack

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

Re: Festplattenzugriffe

  Alt 5. Sep 2006, 01:42
Zitat von Christian Seehase:
    wFilename : array [1.._iFilenameLength shr 1] of WCHAR; // shr 1 ist neu
Christian, warum nimmst du denn shr um die ArrayLaenge zu bestimmen? Ich dachte shr und shl ist zum rechnen (multiplizieren/dividiren) da.

//Edit:
Darf ich dich hier mal noch fragen was ich dich bereits in meiner PM fragte?
Warum musst du hier das Struct (Record) OVERLAPPED nicht in der Delphi-Unit deklarieren aber das Struct (Record) FILE_NOTIFY_INFORMATION musst du deklariern.

Das ist etwas im allgemeinen das ich noch nie im Zusammenhang mit der MSDN/API verstanden habe wann ich ein Struct deklarieren muss und wann nicht. Gibt dafuer n einfaches Hint fuer mich und vlt. auch fuer viele/einige andere hier?
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
Seite 5 von 7   « Erste     345 67      


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 20:24 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