Zmiana formatu kodowania pliku txt w programie

0

Witam,
Na miałem obecnie zadanie stworzyć program który będzie scalał pliki txt w jedną całość. Mniej więcej mi wyszło, jednak jak się teraz okazuje wygenerowany scalony plik txt nie ma odpowiedniego kodowania 65001 unicode UTF8, które jest potrzebne aby dane z tego pliku zostały poprawnie zinterpretowane przez Excela. Excel interpretuje to jako kodowanie 28592 środkowo-europejski ISO.

 
private void scalanie()
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            for (int nCount = 0; nCount < CorrectFileList.Length; nCount++)
            {
                sb.AppendLine(System.IO.File.ReadAllText(CorrectFileList[nCount], System.Text.Encoding.UTF8));
            }
            string output = sb.ToString();
            File.WriteAllText(name, output, System.Text.Encoding.UTF8);
            string word = "<";
            progressBar1.Minimum = 0;
            progressBar1.Maximum = CorrectFileList.Length - 1;
            //Szukanie znaku < i usuwanie wierszy
            for (int i = 0; i < CorrectFileList.Length; i++)
            {
                szukanie(word, i);
            }
            MessageBox.Show("Utworzono plik " + name, "Raport Maker");
            progressBar1.Value = 0;
            czynadpisac = false;
        }
private void szukanie(string word, int i)
        {
            //Wyświetlanie procentowego postępu progress bar
            progressBar1.Value = i;
            int percent = (int)(((double)progressBar1.Value / (double)progressBar1.Maximum) * 100);
            progressBar1.CreateGraphics().DrawString("Postęp: " + percent.ToString() + "%", new System.Drawing.Font("Arial", (float)8.25, System.Drawing.FontStyle.Regular), System.Drawing.Brushes.Black, new System.Drawing.PointF(progressBar1.Width / 2 - 30, progressBar1.Height / 2 - 7));

            //Analizowanie scalonego pliku w celu usuwania wierszy
            TextReader tr = new StreamReader(name);
            string poczytane = tr.ReadToEnd();
            tr.Close();
            TextWriter tw1 = new StreamWriter(name);

            if (poczytane.Contains(word))
            {
                int a = poczytane.IndexOf(word);
                string nowy;
                if (a == 0) nowy = poczytane.Remove(a, 41);
                else nowy = poczytane.Remove(a - 4, 42 + 110);
                tw1.Write(nowy);
            }
            tw1.Close();
            progressBar1.Refresh();
        }

Jest może ktoś w stanie powiedzieć mi co musiałbym zmienić aby program wygenerował plik txt w danym formacie? Dodam że przy poprzedniej wersji tego programu, którą robiłem na laptopie z praktyk, program generował plik w dobrym formacie, ale wtedy był mniejszy zakres usuwania znaków we wierszu
else nowy = poczytane.Remove(a - 4, 42 + 110);
A taki zakres już poprawiłem na swoim własnym laptopie.

0

Jak chcę zrobić to tak

 TextWriter tw1 = new StreamWriter(name, System.Text.Encoding.UTF8);

to wyświetla że nie może przekonwertować string (name) do System.IO.Stream
Jeżeli chcę name przekonwertować do System.IO.Stream

byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(name);
            MemoryStream st = new MemoryStream(byteArray); 

i wtedy

 TextWriter tw1 = new StreamWriter(st, System.Text.Encoding.UTF8);

To wyskakuje błąd że nie można rozszerzyć stumienia pamięci.

2

Możesz użyć string zamiast stream, ale pominełeś argument typu bool, którego wymaga metoda.
W linku kolegi wyżej jest praktycznie gotowiec:

 public StreamWriter(
	string path,
	bool append,
	Encoding encoding
) 
0

ok. Już działa. Dzięki wszystkim za pomoc.

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