2012-07-27 10 views
7

W jaki sposób można pracować z nazwami plików zakończonymi w okresie w Pythonie? Według witryny MSDN takie nazwy plików są poprawne w systemie Windows, ale ilekroć próbuję utworzyć taki plik w Pythonie, usuwa on ostatni okres. Próbowałem nawet utworzyć surowy deskryptor pliku z os.open, ale nadal usuwa kropkę.Jak utworzyć nazwę pliku z końcowym okresem w systemie Windows?

Na przykład, będzie to po prostu utworzyć plik o nazwie 'test'

os.open('test.', os.O_CREAT | os.O_WRONLY, 0777) 

EDIT: Here is the exact quote

O spacji i kropek w nazwach plików i katalogów. Ograniczenia to w powłoce systemu Windows - nie w systemie Windows ani NT. Używając "bash", możesz tworzyć pliki ze spacjami (lub kropkami), zarówno na początku, jak i na końcu nazwy . Następnie możesz wyświetlić i otworzyć te pliki w Eksploratorze, a następnie można je "wymienić" w powłoce (cmd.exe), ale niekoniecznie będzie można je otworzyć z powłoki (szczególnie spacje końcowe i kropki )).

+2

Czy możesz podać link do artykułu, który mówi MSDN nazwy plików kończące okres obowiązują. Oto, co widzę w Wikipedii: "Win32 API usuwa znaki końcowe i kropki (kropki) z nazw plików, z wyjątkiem sytuacji, gdy używane są ścieżki UNC" (http://en.wikipedia.org/wiki/Filename) – sateesh

+0

próbowałeś utworzyć plik z końcowym okresem w nazwie pliku w systemie Windows? Nie zostanie utworzone. Po zmianie nazwy wyświetlany jest jako "test" zamiast "test". Wierzę, że ma to do czynienia z Windows nie python. –

+0

@Sateesh Dodałem link. – Antimony

Odpowiedz

6

Wymyśliłem, jak to zrobić. Wygląda na to, że podanie zwykłej nazwy pliku spowoduje usunięcie okresu nawet po wywołaniu interfejsu API Win bezpośrednio z C. Aby utworzyć dziwne nazwy plików, należy użyć prefiksu \\?\ (to również wyłącza ścieżki względne i konwersję ukośników).

open('\\\\?\\C:\\whatever\\test.','w') 

Jest brzydki i nieprzenośny, ale działa.

+1

To jest dokładnie różnica między funkcjami Win32 API i NTFS. Win32 API oddziela nazwy plików w nazwie + rozszerzeniu i ma dużo do tego obsługi, podczas gdy NTFS naprawdę nie obchodzi. Sekwencja '\\? \' Wyłącza obsługę specjalną w większości interfejsów API Win32 i powoduje, że przenoszą one nazwy plików do interfejsu NTFS API bardziej bezpośrednio, dzięki czemu można robić rzeczy, które zwykle uniemożliwia Win32 API. Jako normalna aplikacja, powinieneś grać ładnie i dostosowywać się do Win32. – Oliver

0

System Windows usunie ostatni końcowy okres, zakładając, że jest separatorem między nazwą pliku a pustym rozszerzeniem. Spróbuj użyć dwóch kropek.

4

Składnia \\?\ współpracuje również z cmd.exe:

dir>"\\?\C:\whatever\test." 
Powiązane problemy