Problem z StreamReader = \r

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?

3

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

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 :/.

2
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

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 :).

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

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 :/?

0

Wypisac je w odwrotnej kolejnosci od poczatku pliku ? ;p

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 :/.

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 ... */
    }
}

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