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

时间:2012-07-31 17:36:58

标签: windows winapi msdn

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的目的是什么?

2 个答案:

答案 0 :(得分:5)

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

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

你会在this article中找到你想知道的关于Win32中路径的所有内容。请注意,某些API(通常在文档中显式调用这些API)接受使用特殊前缀表示的长路径名,这些路径名不受MAX_PATH的限制。

在这种情况下,功能签名是正确的。但有时,MSDN上的示例代码片段随文档一起提供,此示例代码的范围从风格上的好奇到完全可憎。在尝试调整您找到的示例代码时,总是值得使用良好的健康剂量的常识。

答案 1 :(得分:2)

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

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

如果您认为MSDN库不正确,则可以轻松检查。查看Windows头文件中的定义,并将其与MSDN库中给出的定义进行比较。你总会发现MSDN库是准确的。