[C#] wyświetlanie tekstu z pliku w textboxie

Witam! Chcę napisać program w C# i się czegoś nauczyć, bo na studiach to są same podstawy. Wymyśliłem sobie programik podpowiadający słowa do gry w scrabble. Z założenia program ma wczytywać plik tekstowy słownika. To już zrobiłem. Plik ma formę taką, że jest jeden wyraz w jednej linii. Chciałbym wyświetlić wczytany plik w textboxie, jednak nie mam pojęcia jak się za to zabrać. Jakieś pomysły?

Witaj,

najprostszym sposobem jest coś takiego:

string[] lines = System.IO.File.ReadAllLines(@"C:\Users\Public\TestFolder\WriteLines2.txt");

Powoduje to zapisanie każdej linii z pliku do tablicy “lines”. Aby całość zadziałała można uwzględnić namespace:

using System.IO;

wtedy można pominąć “System.IO” w kodzie ładującym dane do tablicy. Sprawdza się to, jeśli odwołujesz się do tej przestrzeni nazw kilka-kilkanaście razy w programie. Znak “@” powoduje możliwość używania znaku “” w stringach. W przeciwnym razie należałoby zapisać:

string[] lines = System.IO.File.ReadAllLines("C:\\Users\\Public\\TestFolder\\WriteLines2.txt");

Aby wyświetlić całość w textboxie można zastosować coś takiego:

foreach (string line in lines)

{

    TextBox1.Text += "\n" + line;

}

Nie sprawdzałem tego, ale wydaje mi się, że będzie działało.

Źródło:

http://msdn.microsoft.com/en-us/library/ezwyzy7b.aspx

OpenFileDialog slownik = new OpenFileDialog();

            slownik.Filter = "Plik słownika|slowa.txt";

            if (slownik.ShowDialog() == DialogResult.OK)

                MessageBox.Show("Wczytano poprawnie plik słownika");

            else

                MessageBox.Show("wystąpił błąd");

czy jak mam ten kod, to mogę użyć zmiennej “slownik” zamiast bezwzględnej ścieżki do pliku?

Jestem dopiero początkujący, ale postaram się pomóc. Zmienna “slownik” wtedy musiałaby przechowywać string ze ścieżką dostępu do pliku. Jeśli tak jest, to ok. Wyglądałoby to mniej więcej tak:

string slownik = @"C:\program\slowa.txt";

string[] lines = System.IO.File.ReadAllLines(slownik);

Dodane 06.04.2012 (Pt) 15:22 – Powinno zadziałać też bez podawania ścieżki bezwzględnej pod warunkiem, że plik slowa.txt oraz program znajdują się w tej samej lokalizacji. Jeśli jest to na poziomie debuggera, to plik slowa.txt musiałby być w folderze “roboczym”, czyli prawdopodobnie “…\bin\Debug” o ile pamiętam. Wtedy może po prostu coś takiego:

string[] lines = System.IO.File.ReadAllLines(slowa.txt);

tak właśnie zrobiłem, wydaje sie, że działa, bo program się wiesza (plik słownika waży ponad 30 mb). zrobię test na mniejszym pliku i dam edit

edit:

mniejszy plik działa, ale tekst jest pisany bez enterów jednym ciągiem

Po pierwsze upewnij się, że textbox jest w trybie multiline.

Po drugie możesz zmienić kod na:

foreach (string line in lines)

{

    TextBox1.Text += line + Environment.NewLine;

}

dzięki wielkie za pomoc wreszcie zadziałało =D>

mam jeszcze takie pytanko, czy tak plik tekstowy jest otwierany tak samo jak w notatniku? Bo notatnik nie daje rady otworzyć tego pliku, zaś “większe” edytory otwierają ten plik bez problemu

Powiem tak: to, jakie rozszerzenie nadasz dla tego pliku to wszystko jedno, ja w paru programach miałem np. “config.bud” - bo program sobie nazwałem BackUp Data… ważne, aby podać prawidłowe rozszerzenie w kodzie źródłowym.

Co do odczytu i tej techniki, technologii to powiem szczerze, że nie bardzo się na tym znam. Generalnie aby odczytać plik w c# możesz zastosować parę metod:

  1. możesz użyć tzw. “strumieni”:

    try

         {
    
             // Create an instance of StreamReader to read from a file.
    
             // The using statement also closes the StreamReader.
    
             using (StreamReader sr = new StreamReader("TestFile.txt"))
    
             {
    
                 String line;
    
                 // Read and display lines from the file until the end of
    
                 // the file is reached.
    
                 while ((line = sr.ReadLine()) != null)
    
                 {
    
                     Console.WriteLine(line);
    
                 }
    
             }
    
         }
    
         catch (Exception e)
    
         {
    
             // Let the user know what went wrong.
    
             Console.WriteLine("The file could not be read:");
    
             Console.WriteLine(e.Message);
    
         }
    

Źródło:

http://msdn.microsoft.com/en-us/library/db5x7c0d.aspx

  1. można użyć System.IO.File.ReadAllText albo System.IO.File.ReadAllLines.

Co do szczegółów odsyłam do bazy MS dla tych metod. Niestety co do otwierania takich plików w notatniku, wordpadzie czy wordzie to się nie znam i nie wiem jak to funkcjonuje “pod maską” :slight_smile:

Jeśli już o najprostszych sposobach mowa:

textBox1.Text = File.ReadAllText(@"C:\Users\Public\TestFolder\WriteLines2.txt");