Zimní výprodej Zimní výprodej
40 % bodů zdarma díky naší Zimní akci!

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

Aktivity (4)
Avatar
Dominik
Člen
Avatar
Dominik:8.10.2019 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.10.2019 21:37
Avatar
Reaktivní uživatel:8.10.2019 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.10.2019 23:00
Kdo je připraven, toho zaskočí něco jiného
Avatar
Petr Doleček
Redaktor
Avatar
Petr Doleček:8.10.2019 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.10.2019 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.10.2019 19:03

Není tahle verze už trochu overkill?

Nahoru Odpovědět
9.10.2019 19:03
Kdo je připraven, toho zaskočí něco jiného
Avatar
Hans
Člen
Avatar
Odpovídá na Reaktivní uživatel
Hans:10.10.2019 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.10.2019 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.