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


(Czajo) #1

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?


(Ktrojanek) #2

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


(Czajo) #3
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?


(Ktrojanek) #4

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);

(Czajo) #5

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


(Ktrojanek) #6

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;

}

(Czajo) #7

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


(Ktrojanek) #8

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:


(somekind) #9

Jeśli już o najprostszych sposobach mowa:

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