saveFileDialog - zapisuje pusty plik

0

Witam, mam problem z kawałkiem kodu, a mianowicie przy wykorzystaniu saveFileDialog chcę zapisać plik .txt i tu pojawia się problem, a mianowicie dodałem button, który okodowałem i pomimo podanej treści plik zapisuje się pusty. Co robię źle? Czego w kodzie za dużo / za mało?
Jestem laikiem w C# i to w sumie mój pierwszy program ( dodam, że przy użyciu System.IO.File.WriteAllText plik zapisuje się z podaną treścią ). Poniżej przedstawiam kod.

  private void button3_Click(object sender, EventArgs e)
    {

        
        SaveFileDialog saveFileDialog1 = new SaveFileDialog();
        saveFileDialog1.Filter = "Txt File|*.txt";
        saveFileDialog1.Title = "Save an Text File";
        saveFileDialog1.ShowDialog();

        if (saveFileDialog1.FileName != "")
        {
            
            System.IO.FileStream fs =
               (System.IO.FileStream)saveFileDialog1.OpenFile();

            string text = " ________________________________________________________  \r\n" +
                           "|               |                     |                  | \r\n" +
                           "|   Dimension   |        Angle        |    Bend Lenght   | \r\n" +
                           "|               |                     |                  | \r\n" +
                           "|---------------|---------------------|------------------| \r\n" +
                           "|    " + textBox_Dim1.Text + "  " + textBox_Angle1.Text + " " + textBox_bendl1.Text + "      \r\n" +
                           "|---------------|---------------------|------------------| \r\n" +
                           "|    " + textBox_Dim2.Text + " " + textBox_Angle2.Text + "  " + textBox_bendl2.Text + "      \r\n" +
                           "|---------------|---------------------|------------------| \r\n" +
                           "|    " + textBox_Dim3.Text + "      \r\n" +
                           "|---------------|---------------------|------------------| \r\n" +
                           "\r\n" +
                           "L= " + textBox_L.Text;

            fs.Close();
        }
    }

Z góry dziękuję za wszelkie podpowiedzi i proszę o wyrozumiałość, gdyż to mój pierwszy post na tym forum :)

0

Jak ma się zapisać skoro nie przekazujesz nigdzie zmiennej text w którym trzymasz to co chcesz zapisać?

0
Złoty Mleczarz napisał(a):

Jak ma się zapisać skoro nie przekazujesz nigdzie zmiennej text w którym trzymasz to co chcesz zapisać?

Czyli gdzie i jaki kod dopisać? Bo domyślam się, że chodzi o coś podobnego do takiego kodu:

 System.IO.File.WriteAllText(@"D:\Bend_Data.txt", text);

aczkolwiek bez wskazania ścieżki.

0

Zastąp ciało if'a na:

string text = "coś tam";

using(StreamWriter streamWriter = new StreamWriter(saveFileDialog1.FileName))
{
    streamWriter.WriteLine(text);
}

piszę z pamięci być może jest tu jakiś błąd, ale ogólnie tak to ma wyglądać.

0

Nie zapisuje Ci się, bo nie każesz niczego zapisać. To, co robisz, to otwierasz nieistniejący plik z prawami do odczytu i zapisu. Następnie przypisujesz wartość do zmiennej text i zamykasz plik. Więc co ma Ci się zapisać?

I po co Ci tu ten stream? Zapisz po prostu w taki sposób:

System.IO.File.WriteAllText(saveDialog.FileName, text);

I pamiętaj o przestrodze w stosowaniu saveDialog.OpenFile():

For security purposes, this method creates a new file with the selected name and opens it with read/write permissions. This can cause unintentional loss of data if you select an existing file to save to. To save data to an existing file while retaining existing data, use the File class to open the file using the file name returned in the FileName property.

0
Juhas napisał(a):

Nie zapisuje Ci się, bo nie każesz niczego zapisać. To, co robisz, to otwierasz nieistniejący plik z prawami do odczytu i zapisu. Następnie przypisujesz wartość do zmiennej text i zamykasz plik. Więc co ma Ci się zapisać?

I po co Ci tu ten stream? Zapisz po prostu w taki sposób:

System.IO.File.WriteAllText(saveDialog.FileName, text);

I pamiętaj o przestrodze w stosowaniu saveDialog.OpenFile():

For security purposes, this method creates a new file with the selected name and opens it with read/write permissions. This can cause unintentional loss of data if you select an existing file to save to. To save data to an existing file while retaining existing data, use the File class to open the file using the file name returned in the FileName property.

Serdecznie dziękuję za fachową odpowiedź! Wszystko działa tak jak chciałem.

Temat do zamknięcia :)

0

Witam! Mam jeszcze jeden mały problem po odpaleniu aplikacji. Podczas uruchomienia jej z poziomu Visual Studio ( Debug -> Start Without Debugging ) uruchamia się, po wpisaniu danych wejściowych, przekalkulowaniu ich, wypisaniu danych wyjściowych i kliknięciu Buttona Export danych zapisuje mi je tam gdzie wskażę, ale po publikacji aplikacji ( Build -> Publish application ) i jej uruchomieniu wszystko działa do momentu zapisu pliku, a mianowicie wskazuję gdzie ma być plik zapisany oraz nadaję mu nazwę, klikam zapisz i nie widzę tego pliku w danej lokalizacji, a jeśli kliknę button exportu jeszcze raz w aplikacji to pokazuje mi się ten plik tam gdzie ma być ( poniżej screen ). Mogę prosić o małą pomoc w celu wyeliminowania tego problemu?

https://zapodaj.net/90ddd85994a0e.jpg.html

Czy jest możliwość, że nie zostały nadane jakieś prawa dostępu do pliku czy coś? Próbowałem w ustawieniach Windowsa zmienić ustawienia wyświetlania folderów i plików, ale to nie pomaga. Z góry serdecznie dziękuję za pomoc!

0

A jaki folder wskazujesz do zapisu?

0

Poprzez saveFileDialog wybieram sobie ścieżkę i próbowałem kilka różnych, np na pulpicie, na dysku D, na dysku C, za każdym razem ten sam efekt, w okienku saveFileDialog plik jest, a jak wejdę w dany folder gdzie plik powinien być, to go nie ma.

0

Brzmi jak typowe zachowanie Windowsowej wirtualizacji zapisu. Zachodzi to wtedy jak próbujesz zapisywać gdzieś, gdzie nie wolno (np. Program Files) i wtedy niby możesz zapisać, ale w praktyce zapisuje się w specjalnym zwirtualizowanym katalogu.

0

Tylko, że próbowałem kilka różnych ścieżek i na dysku C i na D i w głównych folderach i gdzieś głębiej i na pulpicie i nigdzie tego nie widać.

0

No dobra, to może zapisujesz pliki bez żadnego rozszerzenia, a system takie pliki po prostu ukrywa? Albo zapisujesz z rozszerzeniem jakimś systemowym i takie pliki są ukrywane? Spróbuj zapisać z rozszerzeniem .txt

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