Předvánoční slevová akce PHP týden
Další šance dokončit svůj projekt a získat ceny v hodnotě 10.000 Kč! Pokračování úspěšné letní soutěže - ITnetwork winter
Využij předvánočních slev a získej od nás 20 % bodů navíc zdarma! Zároveň také probíhá PHP týden se slevou na e-learning až 80 %

Diskuze: Práce se souborem, který je spuštěn v pozadí

Aktivity (4)
Avatar
Dominik
Člen
Avatar
Dominik:8. října 21:37

Ahoj.
Mám jednoduchou aplikaci, kde jsou 2 tlačítka.
Tlačítko1 - spustí OpenFileDialog a uživatel vybírá nějaký soubor. (Slouží k přečtení textu, který je zapsán v souboru --- přes StreamReader, text se zapisuje do textboxu)
Tlačítko2 - spustí OpenFileDialog a uživatel vybírá nějaký soubor. (Slouží k mazání vybraných souborů.)

A zde je ten problém. Když vyberu nějaký soubor pomocí Tlačítka1 (načte text do textboxu) a tentýž soubor poté zvolím pomocí Tlačítka2 (maže daný soubor) tak mi nelze vybraný soubor smazat z důvodu, že tento soubor je spuštěný již v nějakým programu v pozadí. (Což pokud se nepletu tak je právě ta aplikace). Moje otázka tedy zní, je nějaká možnost jak celou aplikaci nějak "RESTARTOVAT" abych nemusel zbytečně a zdlouhavě vypínat aplikaci a poté zase spouštět?

Zkusil jsem: Já jakožto začátečník bych tento problém řešil nějakým "RESTARTEM" celé aplikace. Ale to bohužel nevím jestli funguje a ani nevím jak toto řešení zrealizovat. Takže jsem bohužel zatím nic nezkoušel....

Chci docílit: Chci docílit toho, aby se jednoduše vybraný soubor vymazal i přesto, že je používaný na pozadí... Nebo docílit toho, aby již na pozadí nebyl používán..

 
Odpovědět
8. října 21:37
Avatar
Reaktivní uživatel:8. října 23:00

Použij using blok (https://www.itnetwork.cz/…-soubory-txt) nebo File.ReadAllText() (nebo File.ReadAllLines(), to vrací pole jednotlivých řádků), všechny možnosti by měly soubor na konci čtení odblokovat (using blok už ze své podstaty).

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
8. října 23:00
Kdo je připraven, toho zaskočí něco jiného
Avatar
Petr Doleček
Redaktor
Avatar
Petr Doleček:8. října 23:16

Zkus po přečtení soubor uzavřít příkazem soubor.Close();
Takhle to mám v programu já a nejsou s tím problémy:

using (StreamReader sr = new StreamReader(filePath)) {
        while (!sr.EndOfStream) {
                string[] readedLine = sr.ReadLine().Split(';');
        }
        sr.Close();
}
 
Nahoru Odpovědět
8. října 23:16
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Petr Doleček
Reaktivní uživatel:9. října 19:03

Není tahle verze už trochu overkill?

Nahoru Odpovědět
9. října 19:03
Kdo je připraven, toho zaskočí něco jiného
Avatar
h.grulich
Člen
Avatar
Odpovídá na Reaktivní uživatel
h.grulich:10. října 10:46

Je, v rámci Close() se volá pouze Dispose(), který je potom stejně zavolán na konci using bloku, takže je to redundantní.

 
Nahoru Odpovědět
10. října 10:46
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.