我有以下抛出异常,记录为:
无法读取“配置文件.ini”。例外:Configuration File.ini(1): '=' character not found in line
但是,文件的结构是正确的。
编码:
ptree pt;
try {
boost::property_tree::read_ini(workingDirectory, pt);
}
catch (const boost::property_tree::ptree_error &pe) {
BOOST_LOG_SEV(cLogger, fatal) << "Failed to read in \"" << workingDirectory << "\". Exception: " << pe.what();
return false;
}
catch (std::exception &ex) {
BOOST_LOG_SEV(cLogger, fatal) << "Failed to read in \"" << workingDirectory << "\". Exception: " << ex.what();
return false;
}
奇怪的是,ini 文件是由不同的应用程序生成/修改的,并且在更改之后会抛出异常。但是,如果我将 ini 文件的确切内容复制到一个新文件并将其重命名为“Configuration File.ini”,则没有问题。
要指定,其他应用程序在完成时关闭文件流,即使其他应用程序没有运行,一旦其他应用程序在任何时间点(即即使在重新启动后)修改了文件,此异常也会得到抛出。
以下是一些尝试和观察的事情:
- 问题似乎不在于文件本身的内容,因为如果我将“坏”文件(即引发异常的文件)的内容复制到另一个文件中,则不会引发异常
- 如果我创建“坏”文件的副本,该副本也会引发异常
- 如果我制作一个“好”文件的副本,该副本不会引发异常
- 已尝试将绝对路径提供给文件(即,将“Configuration File.ini”而不是“C:\Program Files (x86)\Exe Location\Configuration File.ini” - 它没有任何区别。观察到同样的事情。
- 已修改,以便文件在“坏”文件的一个部分中仅包含一项设置,引发相同的异常
- 如果我在“好”文件中进行相同的内容更改,则不会引发异常
- 如果原始 ini 被其他应用程序删除,然后创建,则会引发相同的异常。
因此,我得出的结论是,它与“坏”文件是那些先前已由不同应用程序编辑/创建的文件有关,无论文件本身的内容如何,都会引发相同的异常. 但是,我不明白为什么。
有什么想法/想法吗?