Dlaczego nie można nazwać folderu „._.” W systemie Windows 7?

74

Właśnie zauważyłem, że nie można nazwać folderu ._.- ._zamiast tego zostaje nazwany . Czasami znika tuż po nadaniu mu nazwy, ale pojawia się ponownie po odświeżeniu widoku. Windows wydaje się mieć problem z kropkami na końcu nazwy pliku - dlaczego?

czarny
źródło
20
Warto zauważyć, że natknąłeś się na „włamanie” do rozpoczęcia nazwy pliku za pomocą .w systemie Windows.
jpmc26
8
@ThisNameBetterBeAvailable Untested, ale cd -- -_-prawdopodobnie może działać. --Jest częstym „koniec opcji” marker.
TripeHound,
13
@TenNameBetterBeAvailable Nie, sam --w sobie oznacza „ to jest koniec opcji, traktuj wszystko zaczynając -od literalnej wartości ”. Właśnie przetestowane: mkdir -- -_-i cd -- -_-działa zgodnie z oczekiwaniami.
TripeHound,
2
Alternatywnie, ./-_-powinien również działać.
glglgl
5
@Alexander W Linuksie, ponieważ wydaje się, że tam, gdzie poszły komentarze, cd "-_-"powłoka używa cudzysłowów do grupowania, ale nie traktuje ich jako części argumentu; invalid option
popełni

Odpowiedzi:

123

System Windows zwykle wymaga, aby pliki nie miały rozszerzenia ani rozszerzenia o długości co najmniej jednego znaku; nie jest fajnie z rozszerzeniami o zerowej długości, tj. nazwami plików, które kończą się na .. Foldery mogą mieć również rozszerzenia, dlatego system Windows nie pozwala, aby ich nazwy kończyły się na .. Źródło, z artykułu, do którego link DavidPostill :

Użyj kropki, aby oddzielić nazwę pliku podstawowego od rozszerzenia w nazwie katalogu lub pliku .

(Podkreśl moje.) Jeśli spróbujesz zakończyć plik lub katalog o nazwie kropką, system Windows po prostu przyjmie, że nie chcesz rozszerzenia, i usuwa go, nawet jeśli utworzysz go mdw wierszu polecenia.

Strefa niebezpieczeństwa! Jeśli naprawdę chcesz, aby nazwa folderu się kończyła ., musisz użyć sekwencji zastępowania nazwy magicznej \\?\. W wierszu polecenia md \\?\C:\path\to\container\._.rzeczywiście utworzy folder o nazwie ._., ale wiele programów będzie miało z nim problemy, nawet Explorer:

._.  problemy

Taki katalog można usunąć tylko rdpo nim wraz z jego \\?\nazwą lub zmienić jego nazwę na krótką (8.3 dir /x).

Ben N.
źródło
1
Dziękujemy za szczegółową odpowiedź! :) Myślę, że byłby to idealny folder do ukrywania w nim tajnych rzeczy, takich jak hasła, ponieważ możesz otworzyć folder tylko, jeśli zmienisz jego nazwę jako pierwszy, i nie wszyscy wiedzą, jak go zmienić.
Czarny
19
@EdwardBlack nie powstrzymałoby nikogo, kto mógłby odczytać wymianę stosów (a zatem nie zapewniłby nawet zabezpieczenia przed hipotetycznym młodszym bratem). Nazwa nadana przez dir /xsprawia, że ​​jest dość łatwa, a czasami jest to przydatne.
Chris H
11
FWIW, narzędzia wiersza poleceń Cygwin mogą również tworzyć (i manipulować) takie katalogi w systemie Windows 7, bez użycia magicznej sekwencji.
Steve Jessop,
4
@EdwardBlack Jak wspomniał Chris H, nie jest to bardzo tajne, więc nie powinieneś przechowywać niczego szczególnie ważnego w takim folderze. Co więcej, tajemnica cyfrowa i ochrona to problem, który został rozwiązany wiele razy. Możesz użyć dowolnej liczby metod szyfrowania i programów, aby zapewnić bezpieczeństwo bez polegania na niejasnych nazwach folderów.
Kris Harper
3
Nitpick: Przynajmniej przez 8,3 dni (nie badałem, co jest zapisane na dysku w NTFS) okres ten nigdy nie był zapisywany na dysku w pierwszej kolejności. Nazwa została podzielona na nazwę i rozszerzenie, były one przechowywane osobno. Po przeczytaniu wziął nazwę i jeśli było rozszerzenie, dodano okres i rozszerzenie do nazwy. Tak więc nie było sposobu na wyrażenie ._. w strukturze katalogów oczywiście straciłeś kropkę końcową.
Loren Pechtel
22

Windows wydaje się mieć problem z kropkami na końcu nazwy pliku? Dlaczego to?

Nie kończ nazwy pliku lub katalogu spacją lub kropką. Chociaż bazowy system plików może obsługiwać takie nazwy, powłoka systemu Windows i interfejs użytkownika nie obsługują.

Poniższy link źródłowy zawiera więcej szczegółów na temat zasad nazewnictwa.

Źródłowe pliki nazewnictwa, ścieżki i przestrzenie nazw

DavidPostill
źródło
5
To wciąż brzmi dla mnie jak błąd.
ralu
@ralu Jeśli jest to błąd, stwardnienie rozsiane wydaje się być całkowicie nieciekawe w naprawie. Te ograniczenia obowiązują od Windows XP (jeśli nie wcześniej).
DavidPostill
Windows XP? Domyślam się, że ograniczenia te mają swoje korzenie w MS-DOS 0.x - poprośmy pana Gatesa o wyjaśnienie problemu ...
Christian Severin
17

To nie jest błąd. Zostało zaprojektowane, aby zapobiec problemom ze zgodnością.
Jest to pozostałość po dawnych czasach DOS.

Systemy plików FAT12 (dyskietka) i FAT16 (FAT16 przed obsługą długich nazw plików wprowadzoną w Windows 95) miały tylko nazwy plików przechowywane w 11 bajtach:
8 bajtów dla nazwy, 3 dla rozszerzenia. „Okres” między nazwą a rozszerzeniem nie był nawet zapisywany. Zostało to dorozumiane i automatycznie dodane do celów wyświetlania.
Katalogi w ogóle nie miały rozszerzeń. Zamiast tego 3 bajty rozszerzenia zostały wypełnione znakami „$” (które były nielegalne w prawdziwych nazwach).
Ponieważ system Windows jest nadal zgodny z tym Eksploratorem, a wiele innych składników systemu Windows po cichu sprawia, że ​​okres końcowy zanika, aby zapobiec problemom ze zgodnością.
Jak stwierdzili inni, możesz właściwie obsługiwać takie foldery, używając semantyki RAW (przedrostek \\? \ Przed bezwzględną nazwą ścieżki).
Za kulisami NTFS i sieciowe systemy plików nie mają problemu z takimi plikami i folderami. To tylko przypadek, gdy Explorer próbuje uniemożliwić użytkownikowi stworzenie czegoś, co może powodować problemy dla innego oprogramowania.

(W rzeczywistości istnieją również inne resztki:
nazwy plików, takie jak COM, COM1, COM2, AUX, PRN, LPT, LPT1, LPT2, LPT3, CON mogą powodować podobne problemy, w których Explorer i wiele innych części systemu Windows są pomieszane ponieważ te nazwy są nazwami „zastrzeżonymi”, które również pochodzą z epoki DOS).

Tonny
źródło
3
Dla wszystkich innych czytelników, którzy początkowo byli niedowierzani, jeśli chodzi o brak zapisywania kropki: dotyczy to CP / M i wszystkich wersji FAT, w tym FAT16 i FAT32 .
Ben N
1
Pamiętam jakiś stary program DOS (działa na rzeczywistym DOS, prawdopodobnie używając bezpośrednio Funkcje INT13) daje mi prawdziwy smutek kiedyś przez jakiś sposób udało mu się utworzyć plik o nazwie: foo.bar się na dysku C: ...
rackandboneman
2
@BenN: w rzeczywistości na FAT32 jest trochę inaczej; przechowuje zarówno krótką nazwę pliku (8 + 3 bajty z „domyślną kropką”, kompatybilnymi wstecznymi nazwami), jak i długą nazwę pliku (często nazywaną LFN), składającą się z maksymalnie 255 znaków UCS-2 z wyraźną kropką, i chyba że pracujesz z 16-bitowymi aplikacjami, zawsze pracujesz z LFN.
Matteo Italia
1
@MatteoItalia Rozumiem, że długie nazwy plików są przechowywane we wpisach fałszywych plików; Znane instalacje Windows szukają tych wpisów i jeśli to możliwe, renderują je zamiast nazwy SFN. Zobacz post Raymonda Chena na ten temat lub część VFAT formatu FAT32, do którego odsyłam powyżej.
Ben N
1
-1 mylisz się co do rozszerzeń katalogów; może tak było w przypadku CP / M (moja pamięć jest kiepska z powodu tego systemu operacyjnego), ale używam katalogu „programm.ing” w moim drzewie od czasów DOS-a i zobacz win.tue.nl/~aeb/linux/ fs / fat / fat-1.html - wpisy w katalogu są traktowane jak pliki, mogą mieć także nazwę 8.3. Test: utwórz katalog 8.3 ( mkdir testfile.name) i wyświetl jego nazwę DOS w Windows ( dir /x) - otrzymasz TESTFI~1.NAM, zgodnie z oczekiwaniami.
vaxquis
3

Problem polega na tym, że Windows (DOS) zezwalał na nazwy plików 8.3 w systemach plików FAT. Znaczenie, 8 znaków, po których następuje. a następnie trzy znaki. Unix i Linux pozwalają na dowolny znak, z wyjątkiem / i \ 0. \ 0 jest zakończeniem łańcucha znaków C, a / to separator katalogu. Można użyć wszystkiego innego.

System Windows 95 rozwiązał ten problem, utrzymując bazę krótkich (8.3) nazw plików do metadanych o długich nazwach plików (LFN). Jeśli wyczyścisz pliki systemu operacyjnego Windows 95, na następnej instalacji systemu Windows 95 na dysku pozostaną nieparzyste pliki. Na przykład „Moje dokumenty” mogą nazywać się MYDOCU ~ 1 na dysku. Oczywiście, jeśli stracisz metadane, nie będziesz w stanie łatwo je przekonwertować.

Powłoka musi poradzić sobie z wieloma historycznymi przyrostami, które krążą od czasów MS-DOS.

Mam nadzieję że to pomoże

Ed Neville
źródło
1
Tak naprawdę nie istniała baza danych; Windows po prostu wcisnął części długiej nazwy pliku na dysk jako fałszywe pliki. Zobacz post Raymonda Chena na ten temat .
Ben N