Wzorzec wyszukiwania Directory.GetFiles

Mam klienta, który chce mieć możliwość zapisywania plików w określonym katalogu z systemem automatycznego przyrostu (NNN.fileextension), gdzie pierwszy przesłany plik zaczyna się od nazwy „001”, drugi „002” i tak dalej. To wszystko w porządku, jednak jestem zakłopotany tym, jak mogę przejrzeć istniejące pliki w katalogu i znaleźć ostatni plik, który został przesłany na podstawie określonego wcześniej wzorca nazwy pliku.

Jak mogę przejść przez pliki w pętli, określić, czy plik ma wzorzec „NNN” (N oznacza numer) i uzyskać ostatni plik do przesłania?


person mattgcon    schedule 13.03.2012    source źródło


Odpowiedzi (2)


Możesz użyć Directory.GetFiles(ciąg, ciąg), który akceptuje wyszukiwanie wzorzec dla plików jako drugi argument (znak zapytania ? działa jako jednoznakowy symbol zastępczy).

Aby znaleźć maksymalny identyfikator, należy przejrzeć znalezione pliki, przekonwertować nazwę pliku na wartość całkowitą i wybrać wartość maksymalną.

var maxId = Directory.GetFiles("w:\\", "???.fileextension")
    .Select(file => int.Parse(Path.GetFileNameWithoutExtension(file)))
    .Max();
person Alex    schedule 13.03.2012

Możesz zamówić do daty utworzenia, a następnie wziąć pierwszy.

int maxFileId = 0;
        foreach (string file in Directory.GetFiles("c:\\"))
        {
            try
            {
                string currentFile = System.IO.Path.GetFileName(file).Replace("." + System.IO.Path.GetExtension(file), "");
                if (int.Parse(currentFile) > maxFileId)
                    maxFileId = int.Parse(currentFile);
            }
            catch
            {
            }
        }
        //maxFileId will give the last file
person PraveenVenu    schedule 13.03.2012
comment
To prawda, jednak może zaistnieć sytuacja, w której autoinkrementacja jest wyłączona i co, jeśli nazwa pliku nie jest jednym z plików autoinkrementacji? - person mattgcon; 13.03.2012