Chciałbym wiedzieć (używając C #), jak mogę usunąć pliki w określonym katalogu starszym niż 3 miesiące, ale myślę, że okres dat mógłby być elastyczny.
Dla jasności: szukam plików starszych niż 90 dni, innymi słowy, pliki utworzone mniej niż 90 dni temu powinny zostać zachowane, wszystkie inne usunięte.
Odpowiedzi:
Coś takiego nie wystarczy.
źródło
LastAccessTime
- jeśli chcesz, powinieneś wybrać opcję propertyCreationTime
!Oto 1-liniowa lambda:
źródło
new DirectoryInfo(dir).GetFiles()
jest szybszy niż wnew FileInfo(f)
przypadku każdego pojedynczego pliku.Dla tych, którzy lubią nadmiernie używać LINQ.
źródło
.ToList()
wywołanie oprócz drugiej pętli przez dopasowane pliki?List<T>
definiujeForEach
metodę, którą można zastosowaćAction<T>
do wszystkich elementów. Niestety nie ma takiej metody rozszerzenia dlaIEnumerable<T>
.ForEach
metodę rozszerzeniaIEnumerable<T>
tak dawno temu, czasami zapominam, że nie jest ona wbudowana.Oto fragment pokazujący, jak uzyskać czas utworzenia plików w katalogu i znaleźć te, które zostały utworzone 3 miesiące temu (dokładnie 90 dni temu):
źródło
ToList()
,DirectoryInfo.GetFiles()
zwraca aFileInfo[]
.foreach()
pętlą, która będzie przechowywać wartość(DateTime.Now- new TimeSpan(90, 0, 0, 0))
. Nie ma powodu, aby wielokrotnie to obliczać w pętli.GetLastAccessTime nieruchomość od klasy System.IO.File powinno pomóc.
źródło
Zasadniczo możesz użyć Directory.Getfiles (Path), aby uzyskać listę wszystkich plików. Następnie przeglądasz listę i wywołujesz GetLastAccessTim () zgodnie z sugestią Keitha.
źródło
Coś w tym stylu
źródło
Wypróbowałem ten kod i działa bardzo dobrze, mam nadzieję, że odpowiedź
źródło
Najbardziej kanonicznym podejściem, gdy chcesz usunąć pliki przez określony czas, jest użycie LastWriteTime pliku (ostatnia modyfikacja pliku):
(Powyższe oparte na odpowiedzi Uri, ale z
LastWriteTime
.)Ilekroć słyszysz, jak ludzie mówią o usuwaniu plików starszych niż określone ramy czasowe (co jest dość powszechną czynnością), robienie tego na podstawie LastModifiedTime pliku jest prawie zawsze tym, czego szukają.
Alternatywnie, w bardzo nietypowych okolicznościach możesz skorzystać z poniższych, ale używaj ich ostrożnie, ponieważ zawierają zastrzeżenia.
Czas utworzenia pliku w bieżącej lokalizacji. Uważaj jednak, jeśli plik został skopiowany, będzie to czas, w którym został skopiowany i
CreationTime
będzie nowszy niż plikLastWriteTime
.Jeśli chcesz usunąć pliki na podstawie ostatniego odczytu, możesz tego użyć, ale nie ma gwarancji, że zostanie zaktualizowany, ponieważ można go wyłączyć w systemie plików NTFS. Sprawdź,
fsutil behavior query DisableLastAccess
czy jest włączony. Również w systemie NTFS może minąć nawet godzina, zanim plik LastAccessTime zostanie zaktualizowany po uzyskaniu do niego dostępu.źródło
potrzebujesz tylko FileInfo -> CreationTime
a nie tylko obliczać różnicę czasu.
w app.config można zapisać TimeSpan pliku wartość określającą, jak stary plik musi być usunięty
sprawdź także Odejmowanie daty i czasu metodę .
powodzenia
źródło
Alternatywnie możesz użyć metody File.GetCreationTime, jeśli chcesz usunąć pliki na podstawie dat ich utworzenia.
źródło
używać podczas ładowania strony lub usługi sieciowej lub w jakimkolwiek innym celu.
Moja koncepcja to evrry 7 dni muszę usunąć plik folderu bez korzystania z DB
źródło
źródło
Na przykład: Aby przejść do mojego projektu folderu na źródle, potrzebuję maksymalnie dwóch folderów. Robię ten algorim na 2 dni w tygodniu i na cztery godziny
źródło
Używam następujących elementów w aplikacji konsoli, działającej jako usługa, aby uzyskać informacje o katalogu z pliku App.Settings. Liczba dni przechowywania plików jest również konfigurowalna, pomnożona przez -1 do użycia w metodzie AddDays () obiektu DateTime.Now.
źródło
Przykład typu SSIS ... (jeśli to komuś pomoże)
źródło
ponieważ roztwory
new FileInfo(filePath)
nie są łatwo sprawdzalne, proponuję używać opakowań dla klas, takich jakDirectory
,File
iPath
tak:Następnie użyj czegoś takiego:
źródło
Po prostu stwórz małą funkcję usuwania, która pomoże ci wykonać to zadanie, przetestowałem ten kod i działa doskonale.
Ta funkcja usuwa pliki starsze niż 90 dni, a także plik z rozszerzeniem .zip, który ma zostać usunięty z folderu.
źródło