“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 库中的错误?的主要内容,如果未能解决你的问题,请参考以下文章