C# Directory.SetCurrentDirectory引发PathTooLongException异常

C# Directory.SetCurrentDirectory引发PathTooLongException异常,c#,pathtoolongexception,C#,Pathtoolongexception,关于stackoverflow有几个相关的问题,但要么是我的情况不同,要么是我太笨,无法将这些问题与实际情况联系起来。我希望有人能帮我。此外,我甚至不是一个.NET开发人员,所以我为任何错误的术语使用提前道歉 我的场景如下:用于部署.net应用程序的工具(单击一下?)将其放在一个全名超过300个字符的目录中。应用程序使用第三方组件(我们称之为dbstore)处理驻留在应用程序部署目录中的指定文件 到目前为止,我们使用Assembly.getExecutionGassembly().GetName

关于stackoverflow有几个相关的问题,但要么是我的情况不同,要么是我太笨,无法将这些问题与实际情况联系起来。我希望有人能帮我。此外,我甚至不是一个.NET开发人员,所以我为任何错误的术语使用提前道歉

我的场景如下:用于部署.net应用程序的工具(单击一下?)将其放在一个全名超过300个字符的目录中。应用程序使用第三方组件(我们称之为dbstore)处理驻留在应用程序部署目录中的指定文件

到目前为止,我们使用
Assembly.getExecutionGassembly().GetName().CodeBase
来构造要传递给dbstore的文件的完全限定名。但是dbstore使用老式的api,并且在尝试打开文件时失败

由于dbstore预计不会很快发生更改,因此建议应用程序chdir访问部署目录,并将当前目录中的相对路径名传递给它。这也是公认答复中描述的方法

但是我发现
目录.SetCurrentDirectory
也会抛出
PathTooLongException
。即使在我使用UNC路径名时也会发生这种情况,例如,名称以
\\?\0000000000000\…

我是不是做错了什么?还有其他功能可以使用吗


编辑:似乎没有办法实现我所期待的。据我所知,没有办法将当前目录设置为长路径

使用Environment.SetCurrentDirectory()时是否会得到类似的结果

如果是这样,您可能希望在子文件夹之后更改目录子文件夹

编辑:
Windows实际上为文件路径设置了255个字符(WinXP)或260个字符(Vista)的限制。 请注意,此限制不适用于文件系统,因此您可以将文件存储在这样长的目录路径中,但Windows资源管理器和许多Windows服务无法从这样的路径读取

实际上,它似乎还包括.NET framework方法,因为您无法访问此类文件。您可能需要编写自己的文件系统API,但这会有点太大的开销。你不能缩短文件路径吗?Windows是否提供了一种缩短文件地址的方法(如8个八位字节的文件名)


来源:

使用Environment.SetCurrentDirectory()时是否会得到类似的结果

如果是这样,您可能希望在子文件夹之后更改目录子文件夹

编辑:
Windows实际上为文件路径设置了255个字符(WinXP)或260个字符(Vista)的限制。 请注意,此限制不适用于文件系统,因此您可以将文件存储在这样长的目录路径中,但Windows资源管理器和许多Windows服务无法从这样的路径读取

实际上,它似乎还包括.NET framework方法,因为您无法访问此类文件。您可能需要编写自己的文件系统API,但这会有点太大的开销。你不能缩短文件路径吗?Windows是否提供了一种缩短文件地址的方法(如8个八位字节的文件名)


来源:

没有
环境。SetCurrentDirectory
但是属性
环境。可以分配CurrentDirectory
。我得到了同样的结果。在文件名长度限制之后,即使我在子文件夹之后更改子文件夹,也会出现相同的异常,无论我使用的是哪两个函数。嗨,Igor,我在Windows XP SP3上运行此功能。没有幸运的缩短路径。客户将用于部署的MS工具不允许指定路径,并且始终在长路径中部署。没有
环境。SetCurrentDirectory
,但可以分配属性
环境。CurrentDirectory
。我得到了同样的结果。在文件名长度限制之后,即使我在子文件夹之后更改子文件夹,也会出现相同的异常,无论我使用的是哪两个函数。嗨,Igor,我在Windows XP SP3上运行此功能。没有幸运的缩短路径。客户用于部署的MS工具不允许指定路径,并且总是在长路径中部署。