Chcę utworzyć „folder upuszczania” na dysku współdzielonym z systemem Windows, który jest dostępny dla wszystkich. Chciałbym, aby pliki były automatycznie usuwane, jeśli znajdują się w folderze przez ponad X dni.
Wygląda jednak na to, że wszystkie metody, które znalazłem, wykorzystują datę ostatniej modyfikacji, czas ostatniego dostępu lub datę utworzenia pliku.
Próbuję zrobić z tego folder, w którym użytkownik może upuszczać pliki, aby udostępnić je komuś. Jeśli ktoś skopiuje lub przeniesie pliki tutaj, chciałbym, aby zegar zaczął odtąd odtąd. Jednak data ostatniej modyfikacji i data utworzenia pliku nie zostaną zaktualizowane, chyba że ktoś faktycznie zmodyfikuje plik. Czas ostatniego dostępu jest zbyt często aktualizowany ... wydaje się, że samo otwarcie katalogu w Eksploratorze Windows zaktualizuje czas ostatniego dostępu.
Czy ktoś wie na to rozwiązanie? Wydaje mi się, że codzienne katalogowanie skrótu plików, a następnie wygasanie plików na podstawie skrótów starszych niż określona data może być rozwiązaniem ... ale pobieranie skrótów plików może być czasochłonne.
Wszelkie pomysły będą mile widziane!
Uwaga: Przeglądałem
już tutaj sporo odpowiedzi ... zajrzałem do Monitora zasobów serwera plików, skryptów PowerShell, skryptów wsadowych itp. Nadal używają czasu ostatniego dostępu, czasu ostatniej modyfikacji lub czasu utworzenia ... które, jak opisano, nie odpowiadają powyższym potrzebom.
tmpwatch
.Odpowiedzi:
Użyliśmy kombinacji skryptu PowerShell i zasady. Zasada określa, że użytkownik musi utworzyć folder w udziale Drop_Zone, a następnie skopiować dowolne pliki do tego folderu. Kiedy folder będzie miał 7 dni (używając CreationTime), skrypt PowerShell go usunie.
Dodałem również trochę logowania do skryptu PowerShell, abyśmy mogli zweryfikować jego działanie, i włączyłem kopie w tle, aby ocalić całkowicie nieudolne od siebie.
Oto skrypt bez wszystkich elementów logowania.
źródło
Jeśli możesz założyć NTFS, możesz zapisać klucz (Guid) w alternatywnym strumieniu pliku. Plus data, dzięki czemu można w zasadzie przechowywać bazę danych w plikach.
Więcej informacji można znaleźć na stronie
http://blogs.technet.com/b/askcore/archive/2013/03/24/alternate-data-streams-in-ntfs.aspx
Zasadniczo możesz przechowywać dodatkową zawartość w osobnym strumieniu, który jest kodowany specjalną nazwą.
źródło
Możesz użyć IO.FileSystemWatcher, który pozwala „oglądać” folder z nowymi plikami. Oto elementy, których potrzebujesz, aby to zadziałało.
Te zmienne konfigurują ścieżkę do oglądania i filtr do dostrajania plików do śledzenia:
Spowoduje to ustawienie parametrów folderu do obejrzenia i działań do wykonania po wystąpieniu zdarzenia. Zasadniczo resetuje LastWriteTime dla każdego pliku, gdy jest zapisany:
W razie potrzeby zdarzenie można wyrejestrować, używając:
Wreszcie możesz uruchomić to raz dziennie, aby wyczyścić stare pliki:
To powinno być wszystko, czego potrzebujesz ...
źródło
Minęło trochę czasu, ale stworzyłem stosunkowo prostą metodę rozwiązania tego problemu.
Dotykam dowolnych plików dodanych do katalogu upuszczania (monitorowanych za pomocą narzędzia do monitorowania zasobów) i ustawiam datę ostatniej modyfikacji na datę dodaną do folderu.
Mógłbym wtedy użyć daty ostatniej modyfikacji, aby usunąć wszystkie pliki, które muszą zostać unieważnione. Ma to również tę zaletę, że jeśli ktoś naprawdę zaktualizuje plik, zresetuje odliczanie.
źródło
Nie ma sposobu, aby polegać na datach, w których plik został skopiowany lub przeniesiony do folderu. Windowsowi udaje się zachować to w różnych systemach plików, dyskach, udziałach sieciowych itp. Możesz być w stanie wypracować coś z serwerem plików linux, lub uniemożliwić bezpośrednie kopiowanie plików za pomocą FTP lub internetowego systemu przesyłania.
Jeśli nie masz nic przeciwko, aby ludzie nie mogli modyfikować plików po ich przesłaniu, możesz mieć osobne foldery do przesyłania i dostępu oraz skrypt, który przenosi pliki między nimi i zmienia ich datę. Ale wygląda na to, że chcesz, aby ludzie mogli bezpośrednio modyfikować pliki.
Tak prostym, choć nieco hackerskim rozwiązaniem byłoby zepsuć daty. Napisałbym dwa skrypty:
Skrypt zmiany godzinowej daty
Skrypt powinien być uruchamiany co godzinę w preferowanym języku, który:
W PowerShellie wyglądałby mniej więcej tak:
Uruchomienie tego skryptu dzisiaj (27 maja) ustawia zmodyfikowaną datę wszystkich plików na 1 czerwca 1994 r. - dokładnie 356 * 20 dni temu. Ponieważ zmienia tylko pliki nowsze niż wartość $ before, nie będzie dotykać plików, które zostały już ustawione w przeszłości.
Skrypt oczyszczania
Skrypt czyszczenia będzie uruchamiany co noc i:
Nie napiszę skryptu dla tej części - istnieje wiele narzędzi, które mogą obsłużyć usuwanie plików starszych niż określona data, wybierz cokolwiek chcesz. Ważną częścią jest poszukiwanie plików, które mają 7300 + X dni, gdzie X to liczba dni, w których chcesz je przechowywać od ostatniej modyfikacji.
Zalety
Ma to kilka zalet w porównaniu z innymi odpowiedziami tutaj:
Jedyny problem, jaki widzę, to kopiowanie pliku, który został zmodyfikowany 20 lat temu do folderu upuszczania. Wydaje mi się, że w większości przypadków nie jest to duży problem, ale może się pojawić.
źródło
Możesz sformalizować dodawanie plików do pola rozwijanego za pośrednictwem strony internetowej, która ma „upload” IFRAME. Użytkownik może następnie „opublikować” plik, który wywołuje zadanie PHP / ASP na serwerze, które pobiera plik i umieszcza go w lokalizacji pucker. PHP / ASP może wykonywać dowolną liczbę operacji indeksu / analizy.
źródło
Stworzyłbym skrypt, który będzie działał jako zaplanowane zadania co pięć minut i robi dwie rzeczy.
źródło
Istnieje istniejący mechanizm oznaczania plików, bit Archiwum. Jest tam od początku DOS i jest obecny zarówno w FAT, jak i NTFS.
Zasadniczo każdy plik ma domyślnie ustawiony bit archiwum. Jeśli zobaczysz plik z bitem archiwum w swoim folderze upuszczania, (1) wyczyść ten bit i (2) ustaw datę na dzisiaj. Jeśli widzisz plik bez tego bitu z datą <= 7 dni w przeszłości, usuń go.
Jeśli użytkownik zapisuje plik, gdy znajduje się on w folderze upuszczania, jego bit archiwum jest ustawiany ponownie, więc jego żywotność jest również resetowana do 7 dni. W końcu to nowy plik.
Możesz teraz bezpiecznie używać FileSystemWatcher. Wszelkie problemy (takie jak zduplikowane zdarzenia, przepełnienie bufora, utrata szczegółowych informacji) nie mają już znaczenia, ponieważ wszystkie istotne informacje znajdują się w metadanych pliku.
źródło