Erstellen Sie eine Pre-caching-system
Dieser Artikel beschreibt, wie Auto und Zwischenspeichern kleine Dateien zu überwachen. Dies ist besonders nützlich bei Anwendungen so langsam Bäche geleitet, wie mp3-Player oder p2p-Anwendungen zu transportieren.
Dieses Beispiel zeigt zwei Dinge:
Erstens: wie ein Laufwerk mit ReadDirectoryChangesW überwacht. Dies lässt Windows-Rückruf der Anwendung, wenn in einer Datei oder Dateiattribute geändert wird.
Zweitens, ein kleines Beispiel für einen Thread, der das Zwischenspeichern durchführt.
Erstellen Sie die Stringlists vor dem Aufruf von Monitordrive oder den Start des Threads.
Monitor Auto mit MonitorDrive (Pfadname)
Typ
TTrackInfo = Datensatz
H:Integer;
O:TOverLapped;
B:TFNIBuf;
D:String;
Ende;
TPreCache = class(TThread)
Prozedur Execute; außer Kraft setzen;
Ende;
Funktion Track(I:Integer{TrackIndex}):LongBool;
Umsetzung
Var Erweiterungen: Array [0..0] von String = ('. MP3');
Titel: Array von TTrackInfo Var;
FFilesOpened, FFilesHistory:TStringList;
FHasNewFileToCache:Boolean = False;
FPrecached:Integer;
FTotPrecached:Int64 = 0;
FPreCachedFile:String aus;
CS, Css:TCriticalSection;
Callback-Routine:
Verfahren () {VOID WINAPI} FileIOCompletionRoutine
DwErrorCode:Dword; / / Fertigstellungscode
DwNumberOfBytesTransfered:DWord; / / Anzahl der übertragenen Bytes
LpOverlapped:Pointer / / Zeiger auf die Struktur mit I/O Informationen
); Stdcall;
Var S, M, V:String;
POverLapped: ^ TOverLapped;
ich, L:Integer;
beginnen
Rückkehr
POverLapped: = LpOverLapped;
Wenn @OverLapped = POverlapped then Protokoll ('ie');
l: =-1;
für i: = 0 high(Tracks) Do
Wenn [i] @Tracks. O = LpOverlapped dann entsprechende Index //found
beginnen
l: = i;
zu brechen;
Ende;
Wenn l < 0 dann / / Hilfe, nicht gefunden!
beginnen
Protokoll ('Track Index wurde nicht gefunden');
Ausfahrt;
Ende;
Wiederholen Sie die
Wenn true {Tracks [l]. B.Action <> 0} dann wiederholt //ignore schreibt etc.
beginnen
S: = Spuren [l]. B.FileName; Dies funktioniert, da FileName = Array von WChar!
SetLength (S, Tracks [l]. B.FileNameLength Div 2);
S: = Spuren [l]. D + S; Machen Sie es vollständigen Pfad
{RS Tracks [l]. B.Action von
FILE_ACTION_ADDED: M: = 'die Datei in das Verzeichnis aufgenommen.';
FILE_ACTION_REMOVED: M: = 'die Datei wurde aus dem Verzeichnis entfernt.';
FILE_ACTION_MODIFIED: M: = 'die Datei wurde geändert.
Erstellen Sie eine Pre-caching-system
Erstellen Sie eine Pre-caching-system : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Dieser Artikel beschreibt, wie Auto und Zwischenspeichern kleine Dateien zu überwachen. Dies ist besonders nützlich bei Anwendungen so langsam Bäche geleitet, wie mp3-Player oder p2p-Anwendungen zu transportieren.
Dieses Beispiel zeigt zwei Dinge:
Erstens: wie ein Laufwerk mit ReadDirectoryChangesW überwacht. Dies lässt Windows-Rückruf der Anwendung, wenn in einer Datei oder Dateiattribute geändert wird.
Zweitens, ein kleines Beispiel für einen Thread, der das Zwischenspeichern durchführt.
Erstellen Sie die Stringlists vor dem Aufruf von Monitordrive oder den Start des Threads.
Monitor Auto mit MonitorDrive (Pfadname)
Typ
TTrackInfo = Datensatz
H:Integer;
O:TOverLapped;
B:TFNIBuf;
D:String;
Ende;
TPreCache = class(TThread)
Prozedur Execute; außer Kraft setzen;
Ende;
Funktion Track(I:Integer{TrackIndex}):LongBool;
Umsetzung
Var Erweiterungen: Array [0..0] von String = ('. MP3');
Titel: Array von TTrackInfo Var;
FFilesOpened, FFilesHistory:TStringList;
FHasNewFileToCache:Boolean = False;
FPrecached:Integer;
FTotPrecached:Int64 = 0;
FPreCachedFile:String aus;
CS, Css:TCriticalSection;
Callback-Routine:
Verfahren () {VOID WINAPI} FileIOCompletionRoutine
DwErrorCode:Dword; / / Fertigstellungscode
DwNumberOfBytesTransfered:DWord; / / Anzahl der übertragenen Bytes
LpOverlapped:Pointer / / Zeiger auf die Struktur mit I/O Informationen
); Stdcall;
Var S, M, V:String;
POverLapped: ^ TOverLapped;
ich, L:Integer;
beginnen
Rückkehr
POverLapped: = LpOverLapped;
Wenn @OverLapped = POverlapped then Protokoll ('ie');
l: =-1;
für i: = 0 high(Tracks) Do
Wenn [i] @Tracks. O = LpOverlapped dann entsprechende Index //found
beginnen
l: = i;
zu brechen;
Ende;
Wenn l < 0 dann / / Hilfe, nicht gefunden!
beginnen
Protokoll ('Track Index wurde nicht gefunden');
Ausfahrt;
Ende;
Wiederholen Sie die
Wenn true {Tracks [l]. B.Action <> 0} dann wiederholt //ignore schreibt etc.
beginnen
S: = Spuren [l]. B.FileName; Dies funktioniert, da FileName = Array von WChar!
SetLength (S, Tracks [l]. B.FileNameLength Div 2);
S: = Spuren [l]. D + S; Machen Sie es vollständigen Pfad
{RS Tracks [l]. B.Action von
FILE_ACTION_ADDED: M: = 'die Datei in das Verzeichnis aufgenommen.';
FILE_ACTION_REMOVED: M: = 'die Datei wurde aus dem Verzeichnis entfernt.';
FILE_ACTION_MODIFIED: M: = 'die Datei wurde geändert.
Erstellen Sie eine Pre-caching-system
By Wiezutun
Erstellen Sie eine Pre-caching-system : Mehreren tausend Tipps, um Ihr Leben einfacher machen.