Witam!
Mam aplikację, która umożliwia formatowanie tekstu w kontrolce RichTextBox. Problem polega na tym, że muszę teraz ten tekst zapisać w pliku o specjalnym rozszerzeniu. Zapisać / odczytać umiem, jednak chciałbym dowiedzieć się w jaki najlepszy sposób mogę zaznaczyć w pliku tekstowym w którym miejscu tekst jest sformatowany, tak aby przy odczycie móc w prosty i szybki sposób odtworzyć sformatowany, zapisany tekst w niezmienionej postaci. Proszę o pomoc.

- Rejestracja:około 12 lat
- Ostatnio:około 6 lat
- Postów:99

- Rejestracja:ponad 21 lat
- Ostatnio:około 7 godzin
Druga część posta jest niezrozumiała, ale co do pierwszej, to RichTextBox zapisuje w formacie RTF; jeśli potrzebujesz innego, to trzeba zaimplementować konwersję.


- Rejestracja:prawie 17 lat
- Ostatnio:14 dni
- Postów:2792
NA dyskietkach z lat 80-tych i 90-tych mam pełno plików z rozszerzeniem .doc. Nie znaczy to jednak, że są to pliki WORDa.
A bez parafraz, to nie ważne z jakim rozszerzeniem zapiszesz te pliki - ważne, byś je prawidłow otworzył.

- Rejestracja:około 12 lat
- Ostatnio:około 6 lat
- Postów:99
Być może wyraziłem się niezbyt jasno, więc opiszę problem jeszcze raz. Mam sobie przykładowo edytor tekstu i nazywam go sobie "a". Ustawiam sobie w nim okienko z wyborem czcionki, więc użytkownik może sobie pisać czcionką, jaką tylko zapragnie. Teraz jednak chcę zapisać sobie tekst wprowadzony przez użytkownika do pliku "plik.a".
Sprawa jest taka, że wprowadzony przez użytkownika tekst może wyglądać np. tak:
febe: ferbfebfhew, fejfnjekbfj
, a nie jestem przecież w stanie zapisać w formie czystego tekstu, ponieważ przez to utracę formatowanie. W związku z tym muszę w pliku, do którego zapiszę tekst oznakować jakoś formatowanie. Myślałem o takiej formie zapisu:
<.b.>febe</b>: <.i.>ferbfebfhew</i>, <.u.>fejfnjekbfj</u>"
(bez kropek np. przed i po b, tak jak to wygląda w HTML-u), jednak nie wiem jak łatwo przetworzyć to na postać tego typu, a później odtworzyć ją podczas odczytywania pliku, więc zwracam się do was, czy nie istnieje może jakaś prostsza metoda na dokonanie tego.

- Rejestracja:ponad 21 lat
- Ostatnio:około 7 godzin
No przecież wyraźnie napisałem, że nie chcę używać formatu rtf, tylko swojego własnego
No to co ja ci poradzę. Bierzesz RTF-a (z pamięci, nie musisz zapisywać), parsujesz, konwertujesz, zapisujesz na co chcesz.
Specyfikację RTF znajdziesz tutaj.
Wspominałem coś o wyważaniu otwartych drzwi?
A o porywaniu się motyką na słońce?
Nie zagłębiałem się w wewnętrzne mechanizmy richedita (RichTextBoxa). Ale jeśli jedyne co potrzebujesz to pogrubienie, pochylenie i podkreślenie, to możliwe że łatwiej będzie napisać własną kontrolkę od zera...

- Rejestracja:ponad 21 lat
- Ostatnio:około 7 godzin
PS. Zauważ, że złośliwy użytkownik™ może otworzyć złożony dokument w Wordzie, z tabelkami i obrazkami, skopiować do schowka i wkleić do twojego RichTextBoksa. I rtb to łyknie.
Dlatego nie możesz nawet zakładać, że w rtb będzie tylko to co zakładasz że będzie…

- Rejestracja:około 17 lat
- Ostatnio:około 12 godzin
- Lokalizacja:Wrocław
cPlusPlus napisał(a):
No przecież wyraźnie napisałem, że nie chcę używać formatu rtf, tylko swojego własnego
Pisałeś też, że zależy Ci na innym rozszerzeniu pliku. Czy na pewno odróżniasz format pliku od rozszerzenia?
Bo jeśli faktycznie chcesz użyć swojego własnego formatu, to musisz po swojemu zaimplementować zapis i odczyt, więc gotowe metody klasy RichTextBox
do niczego Ci się nie przydadzą. Tylko to jest wynajdowanie koła na nowo i kupa raczej niepotrzebnej roboty.
Twierdzisz też, że zapis standardowymi metodami Ci działa, a odczyt nie, co już zakrawa na cud, więc fajnie byłoby zobaczyć kod, który to powoduje.

- Rejestracja:około 12 lat
- Ostatnio:około 6 lat
- Postów:99
Proszę, oto kod:
Legenda:
filePath - ścieżka do zapisana pliku określona przez użytkownika, np. plik.aaaa (przykładowe rozszerzenie aaaa jest obranym przeze mnie rozszerzeniem domyślnym i kojarzonym z moją apką)
text - mój RTF
Kod zapisu pliku:
text.SaveFile(filePath);
Kod odczytu pliku:
text.LoadFile(filePath);

- Rejestracja:prawie 17 lat
- Ostatnio:14 dni
- Postów:2792
text.LoadFile(filePath, RichTextBoxStreamType.RichText)
Przy zapisie również. Stałe z VB.NET, bo c# nie mam pod ręką. Działa.

SaveFile
i LoadFile
domyślnie działają w formacie RTF.


- Rejestracja:około 12 lat
- Ostatnio:około 6 lat
- Postów:99

- Rejestracja:około 17 lat
- Ostatnio:około 12 godzin
- Lokalizacja:Wrocław
cPlusPlus napisał(a):
Kod zapisu pliku:
text.SaveFile(filePath);
Kod odczytu pliku:
text.LoadFile(filePath);
Miałeś podać kod, kawałek kodu ze swojej aplikacji, w którym coś namotałeś, skoro nie działa. KOD, nie dwie oczywiste linijeczki, które oczywiście u każdego działają.
cPlusPlus napisał(a):
Błąd w załączniku.
No i przypadkiem podałeś kod jako screenshot... Genialne!
Czemu tak bardzo nie chcesz, żeby Ci pomóc?
W każdym razie, po co wyciągasz nazwę pliku ze ścieżki do pliku z OpenFileDialog? Czemu nie używasz po prostu:
text.LoadFile(d.FileName);
?
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.