C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
чтение строк из ini-файла, длина строки более 2047 символов
Dimon.Ru
Отправлено: 09.11.2004, 11:16


Станционный диспетчер

Группа: Участник
Сообщений: 92



Доброе время!
Столкнулся с такой проблемой: мне нужно читать из ini-файла ОЧЕНЬ длинную строку: 8-10 тыс. символов.

но почему-то при чтении строки длиной больше 2047 символов читаются только первые 2047 символов, а остальное игнорируется.

можно ли как-то это обойти? или это особенность класса TIniFile? sad.gif
Konstantine
Отправлено: 09.11.2004, 11:55


Мастер участка

Группа: Модератор
Сообщений: 545



если у тебя на разделы не поделено — а просто Name=Value, то сделай просто через TStringList
Dimon.Ru
Отправлено: 09.11.2004, 12:11


Станционный диспетчер

Группа: Участник
Сообщений: 92



к сожалению, на разделы поделено.... sad.gif
наверное придется через чтение текстового файла делать sad.gif sad.gif sad.gif

Отредактировано Dimon.Ru — 09/11/2004, 13:15
Gedeon
Отправлено: 09.11.2004, 14:55


Ветеран

Группа: Модератор
Сообщений: 1742



Ну а че, в исходники, вот эта функция файл: inifiles.pas
CODE

function TIniFile.ReadString(const Section, Ident, Default: string): string;
var
 Buffer: array[0..2047] of Char;
begin
 SetString(Result, Buffer, GetPrivateProfileString(PChar(Section),
   PChar(Ident), PChar(Default), Buffer, SizeOf(Buffer), PChar(FFileName)));
end;

procedure TIniFile.WriteString(const Section, Ident, Value: string);
begin
 if not WritePrivateProfileString(PChar(Section), PChar(Ident),
   PChar(Value), PChar(FFileName)) then
   raise EIniFileException.CreateResFmt(@SIniFileWriteError, [FileName]);
end;

Меняйте и юзайте. Надо либу перебилдить.
От тока если динамик ртл любите тада хуже будет, поэтому для уверенности линкуйте все в файл.
Dimon.Ru
  Отправлено: 09.11.2004, 15:05


Станционный диспетчер

Группа: Участник
Сообщений: 92



QUOTE
Меняйте и юзайте. Надо либу перебилдить.
От тока если динамик ртл любите тада хуже будет, поэтому для уверенности линкуйте все в файл.

Жаль, что можно только так (((
спасибо smile.gif , но этот вариант мне не подходит. буду мучиться с чтением простого текстового файла. sad.gif sad.gif sad.gif
xTrim
Отправлено: 09.11.2004, 15:43


Машинист паровоза

Группа: Участник
Сообщений: 208



Можно воспользоваться функцией GetPrivateProfileString или вот оболочечкой к ней. только величену буфера по желанию подправить надо. читает вроде до 56000 символов.
пример:
CODE

#include "sys_ini.h"
...
Ini_file ini("test.ini");
AnsiString s = ini.get("tst","tst","");
Caption = IntToStr(s.Length());


User Attached Image Скачать файл
sys_single.zip


Dimon.Ru
Отправлено: 09.11.2004, 16:30


Станционный диспетчер

Группа: Участник
Сообщений: 92



Спасибо, буду пробовать!!!!

Вернуться в Вопросы программирования в C++Builder