![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
чтение/запись в ini файл [Delphi, Windows]
Delphuk © (2007-10-05 12:33:00)Здравствуйте. Столкнулся с проблемой при чтении/записи многострочного текста в ini файл. Т.к. текст многострочный (берётся из
Memo), то использование метода ValueString не подходит. Решил воспользоваться методом ValueData, делал примерно следующим
образом:
(запись)
......
Var
ini: PIniFile;
str: String;
.......
begin
ini := OpenIniFile('C:\my.ini');
ini.Mode := ifmWrite;
ini.Section := 'testing';
str := Memo1.Text;
ini.ValueData('Text', @str, SizeOf(str));
ini.Free;
.......
end;
(чтение)
Var
ini: PIniFile;
str2: String;
.......
begin
ini := OpenIniFile('C:\my.ini');
ini.Mode := ifmRead;
ini.Section := 'test';
ini.ValueData('Text', @str2, SizeOf(str2));
ini.Free;
Memo.Text := str2;
.......
end;
Если записывать и считывать текст за одну сессию (втечении первого запуска программы), то данный код работает. А если же
считывать данные из ини файла после второго и последующих запусках проги, то в Memo появляется черти что, а потом вообще
приложение вылетает с ошибкой. Я так понимаю, что неправильно использую указатели и тд... Подскажите пожалуйста как нужно
правильно выполнить запись и чтение многострочноготекста, именно в ини файле.
Delphuk (2007-10-09 14:50:00) [1]Спасибо, пока что штатных средств KOL хватает, если не будет хватать места, то конечно же посмотрю вашу реализацию.
mdw (2007-10-09 13:54:00) [2]Я недавно реализовал IniFile для winCE, работает аналогично стандартному, но основан на StrList, т.е. не ограничен в размерах. Попробуй, может подойдет?
Robt (2007-10-09 12:39:00) [3]размер буфера в ValueString = 4095
и используются системные функции такчто может и ещо меньше
если многа надо луче свой формат стелать
Delphuk (2007-10-08 22:45:00) [4]Robt писал:
почему не подходит ?
сохраняеш одну строку где вместо интера (#13#10) другой символ и наоборот
функции соответствущие есть
strreplace например :)
Спасибо, именно так и сделал :) Вот как бывает, когда мало юзаешь строки а работаешь только с математикой :)
Vladimir Kladov, а какие ограничения на длину одной строки при использовании ValueString?
Vladimir Kladov (2007-10-08 20:27:00) [5]Гораздо правильнее каждую строку сохранять как отдельную строку. И в любом случае, учтите, что при использовании старых платформ (9х) ини файл не должен превышать 32 (или 64) К.
Robt (2007-10-08 16:30:00) [6]
> Это какие же функции? Пример можно?
strreplace например :)
Delphuk (2007-10-05 17:35:00) [7]Robt писал:
почему не подходит ?
сохраняеш одну строку где вместо интера (#13#10) другой символ и наоборот функции соответствущие есть.
Это какие же функции? Пример можно?
Robt писал:
и вобще зачем PIniFile?
сохраняй как есть через мемо в файл с расширением ini
Потому что так нужно :) У меня есть набор однотипных данных, к которым нужен быстрый доступ. Например:
[same key1]
value(boolean)=1
value2(integer)=666
value3= Произвольный текст из нескольких строк
[same key2]
value(boolean)=0
value2(integer)=999
value3= Произвольный текст из нескольких строк
...........
И так далее.
Дмитрий К, оки, посмотрю что получится. Но всё равно вопрос остаётся открытым.
Robt (2007-10-05 14:19:00) [8]и вобще зачем PIniFile?
сохраняй как есть через мемо в файл с расширением ini
Дмитрий К (2007-10-05 14:14:00) [9]SizeOf заменить на Length.
Выделять память при чтении (SetLength) столько, сколько было записано, т.е. нужно запоминать длину строки.
Robt (2007-10-05 14:12:00) [10]
> использование метода ValueString не подходит
почему не подходит ?
сохраняеш одну строку где вместо интера (#13#10) другой символ и наоборот
функции соответствущие есть
Delphuk (2007-10-05 12:35:00) [11]P.S.
Поправочка, при чтении указывают ту же секцию ini.Section := 'testing'