Problem z StreamReader = \r

Problem z StreamReader = \r
TC
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:30
0

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

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

Kopiuj
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?

Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 10 godzin
  • Postów:2512
3

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

TC
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:30
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
Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 10 godzin
  • Postów:2512
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

edytowany 1x, ostatnio: Sarrus
TC
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:30
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 :).

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
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
TC
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:30
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 :/?

LN
  • Rejestracja:około 16 lat
  • Ostatnio:około rok
  • Postów:1398
0

Wypisac je w odwrotnej kolejnosci od poczatku pliku ? ;p

TC
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:30
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 :/.

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0
Kopiuj
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

Kopiuj
sr = new StreamWriter("nazwa_pliku")

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

Kopiuj
using (FileStream file = new FileStream("nazwa_pliku")) {
    using (StreamWriter sw = new StreamWriter(file)) {
        /* ... piszemy do strumienia ... */
    }
}
edytowany 2x, ostatnio: adf88

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.