[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