Zapisywanie tekstu sformatowanego

0

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.

0

Druga część posta jest niezrozumiała, ale co do pierwszej, to RichTextBox zapisuje w formacie RTF; jeśli potrzebujesz innego, to trzeba zaimplementować konwersję.

0

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

0

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.

1

Wyważasz otwarte drzwi.

Zapisz plik jako .rtf

 richTextBox2.SaveFile("plik.rtf");

a będzie miał zachowane formatowanie.
Możesz go sobie pod WordPadem albo Wordem otworzyć.

0

Wiem, ale chciałbym, napisać do tego własny kod, gdyż ma to być plik kojarzony bezpośrednio z moją aplikacją, o wybranym przeze mnie rozszerzeniu.

1

No to użyj:

richTextBox2.SaveFile("plik.a");

Rozszerzenie pliku naprawdę nie ma żadnego związku z jego zawartością.

0

@somekind
Metoda działa przy zapisie, jednak gdy próbuję odczytać plik używając:

 RTB.LoadFile("scierzka\\plik.rozszerzenie"); 

Otrzymuję wystąpienie:
Format pliku nie jest prawidłowy.

0

No co ja Ci mogę napisać... Coś skopałeś i dlatego nie działa. Wygląda na to, że nie odczytujesz pliku w formacie RTF.

0

No przecież wyraźnie napisałem, że nie chcę używać formatu rtf, tylko swojego własnego

0

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

0

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…

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

0

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); 
0

Proszę, oto kod:

Działa.

0

Błąd w załączniku.

0
text.LoadFile(filePath, RichTextBoxStreamType.RichText)

Przy zapisie również. Stałe z VB.NET, bo c# nie mam pod ręką. Działa.

0

@Marcin.Miga Ten sam błąd, to samo miejsce...

0
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);

?

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