Zapis i wczytanie

Witam. Co zrobić aby zapisać całą tablicę do pliku (niekoniecznie .txt) ? Dotychczas próbowałem to .txt, ale wszystko z tablicy zapisywało się bez jakichkolwiek przerw, więc dodałem \n i przed każdym wpisem pojawił się kwadracik. Nie wiem jednak w jaki sposób wczytać teraz ten plik z powrotem do tablicy.

Do jakich rozszerzeń można jeszcze zapisywać rzeczy zawarte w tablicy ? W jakich sposób pobrać ścieżkę, w której aktualnie znajduję się program, aby to właśnie tam zapisywał się ten plik bez użycia OpenFileDialog ?

2 lata, 2 miesiące temu | edytowane przez: lqc 3965112

  • Przykładowy program serializujący tablicę stringów do pliku xml i binarego

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization;
    using System.Xml.Serialization;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    
    namespace ConsoleApplication1
    {
    class Program
    {
        static void Main(string[] args)
        {
    
            string[] dane = new string[] { "Tekst 1", "Tekst 2", "Tekst 3" };
    
            //Zapis do XML (plik czytelny dla użytkownika, ale większy
            XmlSerializer xmlSerializer = new XmlSerializer(dane.GetType());
            using (var strumien = new FileStream(@"D:\kopytko.xml",FileMode.CreateNew))
            {
                xmlSerializer.Serialize(strumien, dane);
            }
    
    
            //Zapisz do pliku binarnego (nieczytelny dla użytkownika, mniejszy od XML)
            BinaryFormatter binFormatter = new BinaryFormatter();
            using (var strumien = new FileStream(@"D:\kopytko.dat",FileMode.CreateNew))
            {
                binFormatter.Serialize(strumien, dane);
            }
    
            //----ODCZYT----
            string[] dane_odczytane;
    
            //Z XML
    
            xmlSerializer = new XmlSerializer(dane.GetType());
            using (var strumien = new FileStream(@"D:\kopytko.xml", FileMode.Open))
            {
                dane_odczytane = (string[])xmlSerializer.Deserialize(strumien);
            }
    
            Console.WriteLine(string.Join(",", dane_odczytane));
    
            //z pliku binarnego
            binFormatter = new BinaryFormatter();
            using (var strumien = new FileStream(@"D:\kopytko.dat", FileMode.Open))
            {
                dane_odczytane = (string[]) binFormatter.Deserialize(strumien);
            }
    
    
            Console.WriteLine(string.Join(",", dane_odczytane));
    
            Console.ReadLine();
        }
    }
    

    }

  • W systemach DOS/Windows każdy wiersz pliku jest zakończony 2ma znakami CR i LF.

    Spróbuj zamiast \n dać \r\n.


    Edit:
    Wczytujesz tak samo jak zapisywałeś, dopóki nie natrafisz na ciąg "\r\n" wczytujesz pierwszy element, potem analogicznie wczytujesz następne, aż do znaku EOF (End Of File).
    Szczerze powiedziawszy w C# nie czuję się na tyle dobrze, żeby napisać Ci te kilka linijek kodu.
    Możesz poszukać implementacji jakiegoś algorytmu znajdowania podciągów w ciągu znaków w C# jeśli nie wiesz jak to zrobić.

  • Takie coś udało mi się znaleźć:

    using System;
    using System.Collections.Generic;
    using System.IO;
    
    class Program
    {
        static void Main()
        {
            const string f = "TextFile1.txt";
    
            // 1
            // Declare new List.
            List<string> lines = new List<string>();
    
            // 2
            // Use using StreamReader for disposing.
            using (StreamReader r = new StreamReader(f))
            {
                // 3
                // Use while != null pattern for loop
                string line;
                while ((line = r.ReadLine()) != null)
                {
                    // 4
                    // Insert logic here.
                    // ...
                    // "line" is a line in the file. Add it to our List.
                    lines.Add(line);
                }
            }
    
            // 5
            // Print out all the lines.
            foreach (string s in lines)
            {
                Console.WriteLine(s);
            }
        }
    }
    
    

  • Ziggy@

    Co zrobić aby zapisać całą tablicę do pliku (niekoniecznie .txt) ?

    Jeżeli takowy plik nie musi być czytelny dla człowieka za pomocą zwykłych edytorów tekstowych to zainteresuj się serializacją.

  • \r\n może pomoże ;-)

Zaloguj się, aby dodać swoją odpowiedź