Problem z StreamReader = \r

Odpowiedz Nowy wątek
2012-04-13 11:46
0

Witam. Mam pewien problem z znakiem specjalnym \r. Otóż:

string buffer2 = Encoding.Unicode.GetString(buffer, 0, bytes);
                String[] db = buffer2.Split('|');
                StreamReader sr = new StreamReader("C:\\SERVER\\Users\\" + db[0] + "\\data.txt");
                String db3 = sr.ReadToEnd();
                String[] db2 = db3.Split('\n');

Gdy odczytuję cały plik metodą ReadToEnd, na końcu każdej gdyby zmienną db3 przedstawić w ciągłym zapisie ze znakami specjalnymi wychodzi coś takiego (oczywiście to tylko przykład):

1\r\nUżytkownik=testowy\r\nHasło=testowe\r\n

I tak jest za każdym razem, gdy linia się kończy. Przeszkadza mi to w porównywaniu danych instrukcją if-else. Wie ktoś jak zrobić, żeby się tak nie robiło i wie dlaczego tak jest?

Pozostało 580 znaków

2012-04-13 11:56
3

\r\n jest to po windowsowemu znak końca linii. Nie rozumiem chyba problemu...

Pozostało 580 znaków

2012-04-13 12:05
0

Żle zinterpretowałem jednak pytanie. Jak mam np. tego stringa tco w przykladzie podałem rodzielidź na tabelę String[], żeby w każdym elemencie była cała linia bez \r\n. W metodzie Split da się rodzielać tylko znakami a nie zbiorem znaków :/.

edytowany 1x, ostatnio: TheCCAY, 2012-04-13 12:06

Pozostało 580 znaków

2012-04-13 12:39
TheCCAY napisał(a)

W metodzie Split da się rodzielać tylko znakami a nie zbiorem znaków :/.

A nie prawda:
http://msdn.microsoft.com/en-us/library/tabh47cf.aspx

edytowany 1x, ostatnio: Sarrus, 2012-04-13 12:40

Pozostało 580 znaków

2012-04-13 13:14
0

Sorry, wielka pomyłka :O. Jednak się da, próbowałem stringa tam wsadzić jako argument bez .ToCharArray(). Można zamknąć i wielkie dzięki za pomoc :).

Pozostało 580 znaków

2012-04-14 11:29
1

Alternatywnie możesz użyć StreamReader.ReadLine (rozpoznaje \r\n jako znak końca linii równie dobrze jak samo \n czy samo \r).

edytowany 1x, ostatnio: adf88, 2012-04-14 11:29

Pozostało 580 znaków

2012-04-14 15:49
0

A wiecie może jak zrobić, żeby klasa StreamWriter zaczynała wpisywać dane od końca pliku? Wiem, że jest coś takiego w FileStream, ale wolę się posługiwać StreamWriter :/?

Pozostało 580 znaków

2012-04-14 17:11
0

Wypisac je w odwrotnej kolejnosci od poczatku pliku ? ;p

Pozostało 580 znaków

2012-04-14 17:18
0

Nie, chodzi mi o to, żeby zacząć wpisywać dane do pliku od końca tego pliku, bo jak mam tą komendę WriteLine, to mi "nadpisuje" wszystko i potem tylko jest to co wpisałem programem w tym pliku :/. Mam wrażenie że od początku pliku wpisuje dane :/.

Pozostało 580 znaków

2012-04-14 17:23
0
new StreamWriter("nazwa_pliku", true);

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

TheCCAY napisał(a)

Wiem, że jest coś takiego w FileStream, ale wolę się posługiwać StreamWriter :/?

FileStream to strumień (dziedziczy po Stream), dzięki niemu wysyłamy bądź odbieramy "surowe" bajty (w przypadku FileStream są to bajty pliku). Natomiast StreamReader/StreamWriter jest nakładką na strumień, dokonuje konwersji pomiędzy bajtami czytanymi/pisanym z/do strumienia (parsuje liczby, koduje znaki itp.). StreamReader/StreamWriter może działać z dowolnym strumieniem Stream czyli z FileStream również. Tworząc StreamWriter w oparciu o nazwę pliku

sr = new StreamWriter("nazwa_pliku")

tak na prawdę otwierany jest FileStream, chodź tego "nie widzimy". Równie dobrze moglibyśmy otworzyć FileStream jawnie:

using (FileStream file = new FileStream("nazwa_pliku")) {
    using (StreamWriter sw = new StreamWriter(file)) {
        /* ... piszemy do strumienia ... */
    }
}
edytowany 2x, ostatnio: adf88, 2012-04-14 17:24

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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