【问题标题】:Can't Delete INI File After Calling GetPrivateProfileString调用 GetPrivateProfileString 后无法删除 INI 文件
【发布时间】:2013-07-26 07:07:36
【问题描述】:

我在调用 GetPrivateProfileString 命令后无法删除文件。我有以下代码:

               'Read the INI File
                sb = New StringBuilder(500)
                Select Case FileType
                    Case "Scanner File"
                        res = GetPrivateProfileString("ScannerSetings", "ScannerType", "", sb, sb.Capacity, Filename)
                    Case "Scale File"
                        res = GetPrivateProfileString("ScaleSetings", "ScaleType", "", sb, sb.Capacity, Filename)
                End Select

                'If the result is a value store it, otherwise move it to unprocessed
                If res <> 0 Then InputArray.Add(sb.ToString)

                File.Delete(Filename)

从 INI 文件中读取详细信息后,当我尝试删除该文件时,我收到以下错误:进程无法访问文件 'R:\Drop\011_11_Scanner' 因为它正在被另一个人使用过程。

在退出应用程序之前,我什至无法手动删除这些文件。 任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: vb.net ini


    【解决方案1】:

    在退出应用程序之前,我什至无法手动删除这些文件。

    这清楚地表明Filename指向的文件被锁定。只要它被锁定,你就无法删除它。

    检查您的代码中是否有任何您已打开(例如,出于编写目的)但未关闭的文件句柄。

    如果您在打开文件后没有关闭它,则该文件不会被释放并保持锁定状态……这实际上意味着它不能被删除,直到 (a) 您关闭该文件句柄,或者 ( b)你关闭你的程序,因为那是打开后持有文件句柄的东西。

    编辑

    接下来想到的是 VB.NET 可能需要特殊的用户访问权限才能删除最新 Windows 版本上的 INI。您可以通过简单地使用提升的用户权限执行您的应用程序(例如通过右键菜单;以管理员身份运行)来快速交叉检查。我无法想象这实际上是问题所在——但值得一试。如果确实是问题所在,请检查(并修改)您的应用程序和/或 INI 所在文件夹的权限。

    【讨论】:

    • 感谢e-sushi的回复。但是,使用 GetPrivateProfileString,我实际上并没有实际调用打开文件(除非这是 stringbuilder 所做的)。通常我使用打开和关闭命令,但在这种情况下我不需要,所以我不确定如果文件是自动打开的,如何关闭它。希望这是有道理的。
    • @user2185200 添加了一个编辑,描述了您的问题的另一个潜在原因(和解决方案)。
    • 我已经在管理员模式下运行了我的应用程序,但它仍然无法删除该文件。如果我无法解决这个问题,我将不得不使用另一种读取文件的方法而不是 GetPrivateProfileString。显然,它调用一个进程来打开文件,但从不关闭它。由于我没有提及打开它,我不知道如何处理它。
    • @user2185200 好吧,我确实没有想法。我不得不承认我更像是一个 C/C++ 人而不是 VB 编码器......但奇怪的是 VB NET 实际上会保持文件句柄打开,因为我在调用时从未遇到过使用 C/C++ 遇到这样的问题获取私有配置文件字符串。嗯……看来我还是帮不了你。好吧,至少我试过了。如果您发现问题的原因或解决方法,请不要忘记在此处发布它作为您自己问题的答案。我敢打赌,我们不是唯一想知道这个问题的人......
    猜你喜欢
    • 2011-10-28
    • 2011-05-30
    • 1970-01-01
    • 2014-04-04
    • 2019-01-26
    • 2016-07-29
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多