2013-03-04 2 views
0

Это может быть философский вопрос, но я просматриваю код предыдущего инженера и задавался вопросом, когда самое лучшее время было прочитать ini-файл. Текущее приложение перечитывает файл ini каждый раз, когда ему требуется значение, и записывает данные каждый раз, когда он изменяется. Лучшим решением в моей голове было бы прочитать/записать его один раз и сохранить информацию в памяти. Я что-то упускаю? В файле ini содержится около 40 записей.WinCE 6.0 Чтение ini-файлов

Также инженер сделал свой собственный класс, не существует ли существующего класса для этого?

ответ

1

По умолчанию, я бы прочитал конфигурацию один раз при запуске, и я бы сделал это не только на CE, но и на любой другой системе. Если я хочу реагировать на изменения в конфигурации, я бы предпочел, чтобы перезагрузка была явной, например, например. передавая программе сигнал. Не имея сигналов под CE, вы можете использовать именованное событие или спросить пользователя, есть ли у вас пользовательский интерфейс. Не имея этого, я проверял временную метку файла через регулярные промежутки времени и перезагружал файл при внесении изменений, но все равно сохранял копию в памяти.

Причина, по которой не открывать-считывать-закрывать файл для отдельных значений, заключается в том, что иногда два значения имеют зависимости, и если вы это сделаете, вы можете получить старое и новое значение в памяти, что приведет к несогласованности. Кроме того, я бы утвердил конфигурацию для здравомыслия, прежде чем начать ее использовать. Тем не менее, также ужасно неэффективно обращаться к жесткому диску, просто чтобы прочитать одно значение конфигурации.

Что касается записи изменений, я бы сделал это либо по явному запросу пользователя, либо автоматически после принятия изменений. Тем не менее, я постараюсь избежать написания одного значения по той же причине, что и чтение отдельных значений.

И, наконец, INI-файлы были объявлены устаревшими, поэтому API-интерфейс win32 для их чтения и записи не поддерживается CE. Это объясняет, почему кто-то закачивает свои собственные классы для чтения и записи этих файлов. MS хочет, чтобы вы использовали реестр, для которого API присутствует и поддерживается. Я действительно не согласен с MS здесь, поскольку текстовые файлы конфигурации (необязательные INI-файлы) предоставляют некоторые функции, которые нет в реестре, например, например. возможность использования существующих текстовых инструментов.

0

Вы можете использовать библиотеку Boost.PropertyTree для чтения и записи INI-файлов.

Вот пример кода, который считывает файл INI, модифицирует и сохраняет его обратно:

#include <iostream> 
#include <string> 
#include <boost/property_tree/ptree.hpp> 
#include <boost/property_tree/ini_parser.hpp> 

/* 
[owner] 
name=John Doe 
organization=Acme Widgets Inc. 
*/ 

int main(int ac, char* av[]) 
{ 
    boost::property_tree::ptree pt; 

    // Read 
    read_ini("data.ini", pt); 
    std::cout << pt.get<std::string>("owner.name") << std::endl; // John Doe 
    std::cout << pt.get<std::string>("owner.organization") << std::endl; // Acme Widgets Inc. 

    // Write 
    pt.put<std::string>("owner.name", "New Name"); 
    pt.put<std::string>("owner.name", "New Organization"); 
    write_ini("date2.ini", pt); 

    return 0; 
} 

ПРИМЕЧАНИЕ: При компиляции этого кода на Windows CE может потребоваться для настройки библиотеки Boost.PropertyTree , Похоже, что в стандартной библиотеке C++ для Windows CE нет заголовка <locale>, а Boost.PropertyTree использует его при чтении и записи INI-файлов.

+0

Чтобы получить заголовок , вы также можете переключиться на STLport, который поддерживает CE5 и 6 (и в некоторой степени даже более ранние версии). –