Diskuze: Kontrola zavírání souboru

Člen

Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Ahoj, nevím co myslíš tím "zda soubor nebyl zavřen klasickým křížkem ve Windows?" Myslíš zavření jiné aplikace, která má soubor otevřený?
Mimochodem měl by jsi sjednotit otevírání souborů.
Jen doplnim, ze "with open" drzi soubor otevreny az do konce bloku ... to je mozna odpoved na otazku pgarsky
Používáte dva způsoby, které jsou určeny na stejnou věc, rozdíl řekl Michal.
Doporučuju vždy používat
with open()
A jak je myšleno to sjednocení? Takhle?
#!/usr/bin/env python3
import os
import base64
f = "info.txt"
temp = "temp.txt"
if os.path.exists(f):
#create temporary file and open it
with open(temp, 'w') as temp:
info = open(f, 'r')
text = base64.b64decode(info.read()).decode('UTF-8')
#write text from info to temporary file
temp.write(text)
#open temporary file
tempFile = os.startfile("temp.txt")
#while ... is not closed ... write ... else ... encode and save to info (rewrite)
#delete temporary file
#<end script>
Ne. Ty používáš dvě konstrukce pro tu stejnou věc s tím že jenom atributem říkáš, že jeden soubor otevíráš pro čtení a druhý pro zápis (
open(f, 'r')
a
with open(temp, 'w')
). Pokud otevíráš soubor přes první konstrukci (open), tak by jsi celý ten kód měl volat v try-finally bloku, kde v části finally soubor uzavřes. Když použiješ druhou konstrukci (with open) tak blok try finally dělat nemusíš, protože se to děje automaticky.
Čili upravený kód by mohl vypadat např takto
#!/usr/bin/env python3
import os
import base64
f = "info.txt"
temp = "temp.txt"
if os.path.exists(f):
with open(f, 'r') as input:
text = base64.b64decode(input.read()).decode('UTF-8')
#create temporary file and open it
with open(temp, 'w') as temp:
#write text from info to temporary file
temp.write(text)
#open temporary file
tempFile = os.startfile("temp.txt")
#while ... is not closed ... write ... else ... encode and save to info (rewrite)
#delete temporary file
#<end script>
Případně bloky do sebe vhodně zanořit s ohledem na to co vlastně děláš, nebo co má výt výsledkem.
Snad to má hlavu, patu a pomohl jsem ti alespoň trochu.
Pozn. kód jsem upravoval v browseru, s největší pravděpodobností bude nevalidní ...
Děkuji. A jak tedy mohu kontrolovat, zda je otevřená aplikace, ve které jsem ten TXT soubor otevřel?
To přeci kontrolovat nemusíš ... nebo jsem možná nepochopil čeho chceš docílit, ale zatím z toho mám dojem že sám sobě trochu házíš klacky pod nohy.
Je nemluvím o otevření souboru pomocí open(), já myslím otevření souboru pomocí os.startfile()
Pockej, ted tomu asi nerozumim. Ty chces po systemu aby ti otevral soubor, ktery sam drzis pro zapis? A kontrolovat jestli je jeste otevreny?
Jestli jsem to pochopil spravne, tak se obavam se ze to takhle jednoduse neudelas ... a odpoved na to co se ptas se da zjistit do minuty mrknutim do dokumentace , kde se pise
startfile() returns as soon as the associated application is launched. There is no option to wait for the application to close, and no way to retrieve the application’s exit status.
A nějaká jiná možnost není? Třeba s použitím jiného příkazu, než startfile() ?
Muzes mi prosim nejak popsat (klidne SZ pokud se ti nechce sem) co od toho kodu vlastne chces a proc, treba nejake reseni najdeme.
Napsal jsem SZ, pokud najdeme řešení, postnu ho sem.
Zobrazeno 14 zpráv z 14.