Obsługa plików txt.

0

Siemka wszystkim,
Zakładam ten temat ponieważ mam pytanie odnośnie obsługi plików w C#. Mianowicie mam taki kod:


            string text="aaaaaaa";

            SaveFileDialog file = new SaveFileDialog();
            file.Filter = "save text (txt)|*.txt";
            file.ShowDialog()        
            string filename = file.FileName;
            StreamWriter stream = new StreamWriter(filename);
            stream.Write(text); 

Dlaczego plik który zostanie stworzony jest pusty? a nie ma wpisanego "aaaaaaa"?

Dzięki za odpowiedź :)

3

zamknij stream

0
mk761203 napisał(a):

zamknij stream

ooo fakt, dzięki wielkie,
tak to jest jak się czegoś nie przeczyta tylko rzuci okiem na obsługę stream :)

0

to jeszcze o using doczytaj, bo zamknięcie streamu to nie wszystko.

0
ŁF napisał(a):

to jeszcze o using doczytaj, bo zamknięcie streamu to nie wszystko.

co masz na myśli?

1

W przypadku niektórych zasobów przydaje się stosowanie using,

Gdy napiszecie taki kod:

StreamWriter stream = new StreamWriter(filename);
stream.Write(text); 
stream.Close();

A stream.Write rzuci wyjątkiem (bo np. text będzie null), to metoda Close() nie zostanie wywołana, więc plik ciągle będzie zablokowany.

W celu obsługi błędów należałoby to napisać tak:

StreamWriter stream = new StreamWriter(filename);
try
{
    stream.Write(text); 
}
finally
{
    stream.Close();
}

Ale na szczęście można prościej:

using (StreamWriter stream = new StreamWriter(filename))
{
    stream.Write(text); 
}

Samo using zapewnia, że stream zostanie zamknięty zawsze, nawet jeśli po drodze nastąpi jakiś błąd.
Z tymże using nie wywołuje metody Close, lecz Dispose, bo współpracuje z klasami implementującymi interfejs IDisposable.
Generalnie lepiej używać tej konstrukcji dla wszelkich strumieni, bitmap, połączeń sieciowych i bazodanowych, zamiast ręcznie bawić się w Close czy Dispose.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0