“TCHAR cFileName[MAX_PATH];” - MSDN 库中的错误?

Posted

技术标签:

【中文标题】“TCHAR cFileName[MAX_PATH];” - MSDN 库中的错误?【英文标题】:"TCHAR cFileName[MAX_PATH];" - mistake in the MSDN library? 【发布时间】:2012-07-31 17:36:57 【问题描述】:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365740%28v=vs.85%29.aspx

cFileName 文件名。

MAX_PATH 的值_MAX_FNAME 几乎相同,但在这种情况下使用第一个会产生误导。无论如何,如果他们的意思是带有名称的完整路径,它应该是cFileName[MAX_PATH+_MAX_FNAME]; 吗?使用MAX_PATH的目的是什么?

【问题讨论】:

MAX_PATH_MAX_FNAME 不同。 MAX_PATH 是 260,_MAX_FNAME 是 256。 【参考方案1】:

MAX_PATH 常量表示整个路径的最大长度,包括文件名和扩展名。无论是相对路径、完全限定路径,甚至只是一个文件名,都无关紧要;它们都具有相同的最大长度。

因此,您永远不会看到MAX_PATH + _MAX_FNAME,因为这会超过路径允许的最大长度。

您可以在this article 中找到几乎所有您想知道的有关 Win32 中路径的信息。请注意,某些 API(这些 API 通常会在 docs 中显式调用)接受长路径名,用特殊前缀表示,不受 MAX_PATH 的限制。

在这种情况下,函数签名是正确的。但是,有时 MSDN 上会附带文档的示例代码的 sn-ps,并且此示例代码的范围从风格上的好奇到完全令人厌恶的任何地方。在尝试调整您找到的示例代码时,使用良好的健康常识总是值得的。

【讨论】:

【参考方案2】:

这里没有错误。在受长度限制的 Windows API 中,名称的最大长度(通常)为MAX_PATH。不管名称是完全指定的绝对路径、相对路径还是只是文件名,长度限制仍然是MAX_PATH

很可能底层文件系统有不同的限制。本地文件系统的限制可能小于 260 是完全合理的。但如果 API 声明了 260 个字符的限制,那么这就是使用该特定 API 时的限制。

如果您认为 MSDN 库不正确,检查起来很容易。查看 Windows 头文件中的定义并将其与 MSDN 库中给出的定义进行比较。您总是会发现 MSDN 库是准确的。

【讨论】:

以上是关于“TCHAR cFileName[MAX_PATH];” - MSDN 库中的错误?的主要内容,如果未能解决你的问题,请参考以下文章