Archiwum w komunikatorze

0

Witam.

W czym polecacie stworzyć archiwum w komunikatorze?
Próbowałem się bawić z SQLite, ale może Wy polecicie mi coś innego, lepszego?
Zależy mi by potencjalna baza danych (bo raczej za pomocą baz danych najlepiej to stworzyć) była dość szybka (dla długich archiwów) oraz prosta w obsłudze. Dobrze by było, by nie można było odczytać zawartości pliku przez rózne edytory tekstu np notatnik (w SQLite był ten problem). W razie konieczności zostanę przy SQLite i się poduczę go używać ;)

Dodam, że nigdy nie miałem większej styczności z tym zagadnieniem.
Pozdrawiam.

0

No skoro ma notepad to obsługiwać, to napisz to sam. No chyba że sądzisz że plików nie da się używać w Delphi.

0

właśnie chodzi mi o to, by notepad nie mógł tego odczytać :P

0

To zrób tak, jak napisał payl i zakoduj np.szyfrem Cezara.

0

ok, spróbuję sam coś wykombinować.

Czy macie jakieś sprawdzone metody na to? Co najlepiej zastosować, w jakim formacie do pliku zapisywać, by było w miarę szybkie? :)

Pozdrawiam

1

Najlepiej zaipisywać po ludzku, a tutaj akurat prędkość zapisu nie musi być ogromna w porównaniu do prędkości odczytu.
Mi się wydaje że najzwyklejsze dopisywanie na końcu będzie ok, a jak czytamy to trzeba będzie się przenosić po pliku ale prędkość powinna być optymalna...

1

Pliki Ini+szyfr Cezara.
To jest najłatwiejsze połączenie.
Ew.można wymyślić takie coś:

Type TWiadomosc = Record
 Data: String[10]; //00.00.0000
 Godzina: String[5]; //00:00
 UserName: String; //użytkownik, który napisał wiadomość
 MessageLen: Integer; //długość wiadomości
 Message: Array Of Char; //Array[0..MessageLen] Of Char <- pojedynczy znak wiadomości
End;
Type TRozmowa = Record
 PoczatekData, KoniecData: String[10]; //00.00.0000
 PoczatekGodzina, KoniecGodzina: String[5]; //00:00
 User1, User2: String[255]; //użytkownik 1, użytkownik 2; jak będzie ci się nudziło, to zawsze możesz zrobić takie coś -> User1Len: Integer; User1: Array Of Char; i analogicznie User2
 MessageCount: Integer; //ilość wiadomości
 Messages: Array Of TWiadomosc; //Array[0..MessageCount] Of TWiadomosc <- pojedyncza wiadomość
End;

I zapisywać BlockWrite/odczytywać BlockRead
Każda rozmowa to osobny plik, ew.wszystkie rozmowy mogą być np.w archiwum zip, które także możesz zakodować, jak sobie tam chcesz...
PS: oczywiście jest to podstawowa wersja i wymyślona na żywca; jak pomyślisz to też powinieneś dać radę coś wymyślić.

1

Jak chcesz możesz użyć LZMA SDK Igora Pavlova, w łatwy sposób zmniejszysz rozmiar archiwum i zaszyfrujesz swoje dane w miarę mocnym AES-256. Prędkość kompresji nie jest zła - 1 MB/s na procesorze 2GHz i dekompresji - 10-20 MB/s.

Pozdrawiam.

PS. Choć szczerze mówiąc, jak używałem w swoim projekcie tego SDK, to na moim zabytku z procesorem 1,2 GHz prędkości były większe niż te, które podaje autor.

0

Patryk27 właśnie też oparłbym to o rekordy, ale zależy mi bardzo, by to wszystko było w jednym pliku. Kiedyś zrobiłem takie archiwum, że każda rozmowa, była w osobnym pliku, lecz szybko zrobił się z tego niezły bałagan. Może zrobię jakąś tablicę dynamiczną rekordów z rozmówcami i ją całą zapiszę do jednego pliku, ale czy to wypali? Nie mówię tu o samym dopisywaniu nowego rozmówcy na koniec pliku, lecz o uaktualnieniach już tych istniejących.

Pozdrawiam.

0

Oczywiście, że tak się da.
Tylko po co trudzić sobie życie?
Skorzystaj z archiwum...

0

powiedzcie mi po co namawiacie autora aby wymyślał koło od nowa?? W czym wam ten biedny sqlite przeszkadza

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