[python] Kratka DOSova jmena (bylo SQLite Windows)

Petr Prikryl PrikrylP na skil.cz
Pondělí Únor 27 16:00:02 CET 2006


Leos Pol
> Petr Prikryl
> >>> [...]
> >>> Jenže takovou cestu si nemohu spolehlivě uschovat, protože
> >>> Windows nezaručí, že se za chvíli (za určitých okolností)
> >>> nebude jmenovat jinak. [...]
> > Takže například, když si někde schovám AAAAAA~2, 
> > nevím v budoucnu, jakému adresáři to vlastně 
> > odpovídá. Raději by se to mělo řešit jinak.
> >   
> Na prevod zpet se pak muze pouzit api fce GetLongPathName:
> 
>      >>> import win32api
>      >>> short = win32api.GetShortPathName('c:/program files')
>      >>> win32api.GetLongPathName(short)
>     'c:/Program Files'
>      >>>

Jaroslav Pachola
> To ale IMO nic neresi - v budoucnu
> GetLongPathName() muze priste pro stejny parametr
> vratit uplne jiny vysledek v zavislosti na
> aktualnim obsahu (toho sameho) adresare. Kratka
> jmena se (relativne) bezpecne daji pouzivat jenom
> jako nouzovka pri nejakem jednorazovem
> administrativnim zasahu.

Přesně to jsem chtěl naznačit v minulém příspěvku.
Zkuste tento program:

b.py
==================================================
import os
import win32api

os.mkdir('aaaaaaaaaaaaA')
os.mkdir('aaaaaaaaaaaaB')
os.mkdir('aaaaaaaaaaaaC')
os.mkdir('aaaaaaaaaaaaD')

long_path = os.path.abspath('aaaaaaaaaaaaB')
uschovano_v_databazi = win32api.GetShortPathName(long_path)
print long_path + '  -->  ' + uschovano_v_databazi

os.rmdir('aaaaaaaaaaaaB')
os.rmdir('aaaaaaaaaaaaC')
os.rmdir('aaaaaaaaaaaaD')

os.mkdir('aaaaaaaaaaaaE')
os.mkdir('aaaaaaaaaaaaF')
os.mkdir('aaaaaaaaaaaaG')
os.mkdir('aaaaaaaaaaaaH')

long_path = win32api.GetLongPathName(uschovano_v_databazi)
print uschovano_v_databazi + '  -->  ' + long_path

# uklid pred dalsimi pokusy
for item in os.listdir('.'):
    if os.path.isdir(item):
        os.rmdir(item)
==================================================

V mém konkrétním pokusném prostředí to vypisuje...

C:\tmp\a\aaaaaaaaaaaaB  -->  C:\tmp\a\AAAAAA~2
C:\tmp\a\AAAAAA~2  -->  C:\tmp\a\aaaaaaaaaaaaE

To znamená, že jsem si něco správně poznamenal
a správně použil, ale místo B jsem dostal E
(což jsem zcela určitě nechtěl). Tady je jasně 
vidět, čím to může být. Ale až se to někde 
trochu víc zašmoulí, budete si rvát vlasy (pokud
jich máte víc, než já ;) a hned tak na příčinu
nepřijdete.

pepr


Další informace o konferenci Python