berzegov, текстовый документ со своим собственным расширением будет распознаваться без проблем как txt. Т.е. работаешь с ним так же, как с текстовыми файлами.
berzegov, текстовый файл сможет прочитать любой чайник, блокнотом. Есть несколько вариантов, всё зависит от того, какую информацию тебе нужно хранить. Если куча, например, чисел одинакового типа - file of "тип". Если одинаковые записи с разными типами - тоже file of "тип", только строки хранить не удобно, т.к. тупо пробелами забивает, следовательно, лишние килобайты. Можно вообще просто сделать - file of byte, а дальше уже обрабатывать каждый байт так, как тебе удобно. Вот например, формат (на ходу придумываю):
Quote
Первые 4 байта - размер;
Следующие 10 байт - имя; ...
Блок информации размером, указанным в первых 4-х байтах файла;
Последние N байт - пожелания здоровья и счастья всем родственникам и друзьям в какой-нибудь вымершей кодировке.
Ну а читать по байтам. Сложно, конечно (ну, сложно писать алгоритм чтения/записи - а потом всё будет очень просто), зато компактно, блокнотом или hex-редактором открыть - ни фига не поймёшь.
Quote Первые 4 байта - размер; Следующие 10 байт - имя; ... Блок информации размером, указанным в первых 4-х байтах файла; Последние N байт - пожелания здоровья и счастья всем родственникам и друзьям в какой-нибудь вымершей кодировке.
Т.е. значения идут тупо подряд, а т.к. мы не знаем точной длины одной строки (можно, конечно, втыкать пробелы - но, как я уже говорил, это нерационально), вставляем символ-разделитель (например, "@", или любой другой, какой точно не встречается в строчках).
Quote (berzegov)
P.S. .ini не предлагать
А чем тебе ini не нравится? (расширение можно любое поставить) И ещё: тебе нужно, чтобы пользователь не мог прочитать, или пусть читает?
Если хочешь, чтоб просто данные не были в голом виде, можно просто шифровать нехитрым КСОРОМ, без ключа не разшифруют. В файл пишешь например Едит1@значения# конечно в зашифрованом виде, пример:
function Encrypt(const InString: string; StartKey, MultKey, AddKey: Integer): string; var I: Byte; begin Result := ''; for I := 1 to Length(InString) do begin Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8)); StartKey := (Byte(Result[I]) + StartKey) * MultKey + AddKey; end; end;
function Decrypt(const InString: string; StartKey, MultKey, AddKey: Integer): string; var I: Byte; begin Result := ''; for I := 1 to Length(InString) do begin Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8)); StartKey := (Byte(InString[I]) + StartKey) * MultKey + AddKey; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin S:=Encrypt(Edit1.Text,StartKey, MultKey, AddKey); Caption:=S; end;
procedure TForm1.Button2Click(Sender: TObject); begin Caption:=Decrypt(S,StartKey, MultKey, AddKey); end;