在Windows Server 2003中停止太长的文件名

我们发现长文件名的问题,通常在“我的文档”或共享驱动器上。

基本上,似乎可以编写一个文件名非常长的文件,并保存在“我的文档”中。 那台计算机上没问题,文档是“我的文档\ verlylongfilename”。

当你到达服务器的时候,问题就出现在path上,path变成了“e:\ All Users \ Staff Folders \ JSmith \ verylongfilename”

我发现“删除”或重命名这些文件的唯一方法是映射到文件夹,但如果要移动一组文件夹则完全没有意义。

这只是一个限制,我们必须忍受和修复,因为我们发现,或者有另一种方式来访问这些文件,甚至阻止原来的用户保存超过30个字符的文件名? GPO设置可能?

NTFS文件系统支持最多达32767个Unicode字符的path,每个path组件(目录或文件名)最长可达255个字符。 但是Windows资源pipe理器和大多数其他Win32应用程序仅支持path中的255个字符。

您可以使用robocopy ,这是Microsoft提供的免费工具,完全支持长path名(超过256个字符)。 这里logging了如何使用robocopy列出所有开关和选项。


以下是MSDN文章的摘录,它解释了为什么许多程序将path限制为255个字符:

在Windows API中(下面将讨论一些例外情况),path的最大长度是MAX_PATH,定义为260个字符。 本地path按以下顺序组织:驱动器号,冒号,反斜杠,用反斜杠分隔的组件以及终止的空字符。 例如,驱动器D上的最大path是

     D:\约256个字符的pathstring<NUL>

其中“”表示当前系统代码页不可见的终止空字符。 (字符<>在这里用于视觉清晰,不能是有效pathstring的一部分。)

http://www.ratsauce.co.uk/notablog/LongFileNames.asp

这是Windows NT家族中的一个愚蠢的devise决定之一。 据我所知,没有办法阻止用户创build长文件名。

JR

我有一个类似的问题,同时自动化一些参数化的清除组和家庭驱动器。

我编写了一个自定义的C#应用​​程序来完成它,但是要处理长文件名,需要使用Win32 API的Unicode版本,而不是通常的具有上述限制的Ascii版本。 这也意味着在pathstring的前面添加\?\(如果已映射)或\?\ UNC \如果是通过UNC。

我可以给你一些代码示例或进一步的信息,如果你想。