ich eine Aufgabe habe Dateien aus einem Ordner mit C#, die Namenskonvention der Dateien zu verarbeiten, ist wie folgt:Dateinamen aus einem Ordner abrufen, während neue Dateien, die von anderen Anwendungen erstellt werden
0000001.log
0000002.log
....
00nnnnn.log
Bei einer Parameter x, alle Dateien mit dem Namen kleiner als x werden verarbeitet. Nach der Verarbeitung wird die Datei gelöscht.
Gleichzeitig fügt eine andere Anwendung diesem Ordner fortlaufend Protokolldateien mit einer inkrementellen Nummer hinzu.
Ich weiß, ich kann GetFiles
oder EnumerateFiles
& linq in C# verwenden, um die Dateien zu filtern, die ich brauche.
Wenn ich richtig verstehe, werden diese beiden Methoden zuerst alle Dateinamen in den Speicher laden und dann diejenigen herausfiltern, die ich brauche.
Seit nnnn
ist eine ziemlich große Zahl, ich denke, wird es effizienter sein, wenn ich eine Möglichkeit haben, nur die Dateinamen abzurufen ich brauche, dh x Anzahl der Dateien, ohne alle Dateinamen zu Laden
Ist das möglich?
'EnumerateFiles' ruft nicht alle übereinstimmenden Dateinamen zuerst im Speicher ab. Siehe Anmerkungen hier https://msdn.microsoft.com/en-us/library/dd383458(v=vs.110).aspx, oder wenn sehend glaubt, folgen Sie dem Code dafür auf referencesource.microsoft.com, oder befestigen Sie ProcessMonitor zu einer Test-App und Sie werden sehen, dass es die Dateinamen inkrementell abruft. ** Wenn ** Sie die Iteration vorzeitig beenden, zahlen Sie nicht die gesamten Kosten. – steve16351
@Kason, nein, das wird nicht funktionieren, da ich die Datei von 1 bis x brauche. –
@ steve16351, Ja Ich wusste, dass EnumerateFiles früh beendet werden kann, aber es scheint keine Garantie zu sein, dass es nach Dateinamen in aufsteigender Reihenfolge sortiert. Bitte vergessen Sie nicht, dass die andere Anwendung die Datei zum selben Ordner hinzufügen wird. –