【问题标题】:Need alternative for reading ini-files (problems with kernel32-solution)需要读取 ini 文件的替代方法(kernel32 解决方案的问题)
【发布时间】:2014-04-05 18:00:20
【问题描述】:

我正在使用 Kernel32 解决方案 (GetPrivateProfileString) 读取一个 ini 文件。它在 XP 下运行良好,但现在它(不)在 Windows-7 下运行。 现在我遇到了windows7保护文件的问题,我无法写入它(使用另一个程序)。 一旦我用 kernel32 打开 ini 文件,它就会被永远阻塞,直到我关闭程序。 是否有任何参数可以简单地读取 ini- 文件而不对其进行写保护? 或任何其他读取ini文件的解决方案? 我正在使用 C# 2010 express

感谢您的帮助

编辑: 同时我试图将原始ini文件复制到第二个文件,然后我只使用kernel32函数读取复制的ini文件。 但现在看来,简单的复制命令 System.IO.File.Copy(PathOriginal, lokalPath, true); 复制后正在阻止其他程序的原始文件。

所以我现在的问题不在于 ini 文件。一般是windows 7下的文件保护。

在 Windows 7 中是否有“释放”文件句柄的技巧?

【问题讨论】:

  • INI 文件现在或多或少已被弃用。您可以尝试使用配置文件,但我发现它们很难用作读写源。如果我需要编写一些应用程序或用户配置,我更喜欢使用存储在 CommonApplicationData 或 ApplicationData 中的 XML 文件
  • 对 C# ini 文件解析器的简单搜索显示了很多可能性。其中许多将文件处理留给您,他们只是想传递一个打开的流 - 所以您只需打开至少指定 FileShare.Write 的流并交给他们。

标签: c# ini blocked


【解决方案1】:

试用Nini,它是 100% C# 版本(不需要 DLL/PInvoke)。还有一个NuGet package

示例 INI 文件:

[Cars]
model = Toyota
year = 2012

C# 代码:

Nini.Ini.IniDocument doc = new Nini.Ini.IniDocument ("configuration.ini");
Console.WriteLine ("Model: " + doc.Get("Cars", "model"));
Console.WriteLine ("Year: " + doc.GetInt("Cars", "year"));

【讨论】:

    【解决方案2】:

    查看这个 IniReader 库。它可能会帮助您解决问题:

    http://www.mentalis.org/soft/class.qpx?id=6

    【讨论】:

      猜你喜欢
      • 2019-09-13
      • 2021-02-01
      • 2011-02-07
      • 1970-01-01
      • 2020-08-31
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多