gpt4 book ai didi

c# - 如果给定短路径,应用程序无法从应用程序配置中读取

转载 作者:太空宇宙 更新时间:2023-11-03 15:55:21 26 4
gpt4 key购买 nike

如果我指定文件的短路径并运行应用程序,那么它将无法从 exe.config 文件获取设置。例如,我在 app.config 中给出了以下设置

<setting name="test" serializeAs="String">
<value>abc</value>
</setting>

在我下面的代码示例应用程序中

Public Class Form1
Dim aa As String = My.Settings.test

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
MsgBox(aa)
End

End Sub
End Class

它按预期显示 abc

现在在调试文件夹中,如果我将设置更改为其他值,例如

<setting name="test" serializeAs="String">
<value>xyz</value>
</setting>

然后从调试文件夹运行应用程序(D:\Desktop\test\bin\Debug\test test 123.exe) 然后它显示 xyz 因为我已经改变了它。

但是如果我指定文件的短路径(D:\Desktop\test\bin\Debug\TESTTE~2.EXE)并运行(可以从 Windows 运行)然后它显示 abc 本身不是 xyz。

那么,为什么在给定短路径时应用程序无法读取应用程序配置文件?

编辑:您可以下载代码 here要查看错误,您可以运行具有长路径和短路径的\test\bin\Release\test test 123.exe 文件(我已将配置更改为 xyz 以设置测试)

最佳答案

我不确定为什么会失败,但如果您的代码中需要 8.3 版本的路径,我建议将完整路径放在配置文件中,然后使用 Windows API 获取 8.3 路径。似乎没有这方面的 native .NET 功能。但是,我在 CodeBlog 上找到了一些片段。

Convert long file name to short one

相关片段:

public static String GetShortPathName(String longPath)
{
StringBuilder shortPath = new StringBuilder(longPath.Length + 1);

if (0 == PathExtensions.GetShortPathName(longPath, shortPath, shortPath.Capacity))
{
return longPath;
}

return shortPath.ToString();
}

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern Int32 GetShortPathName(String path, StringBuilder shortPath, Int32 shortPathLength);

关于c# - 如果给定短路径,应用程序无法从应用程序配置中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23892506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com