疑问1,在stdlib.h中有如下定义
#define _MAX_PATH 260
#define _MAX_FNAME 256
#define _MAX_EXT 256
#define _MAX_DRIVE 3
#define _MAX_DIR 256
但是很多程序中用的都是MAX_APTH,即没有前面的下划线,怎么解释?疑问2,
Windows系统中路径名总长度真的就不会超过260吗?这是否实际上限定了文件夹的深度呢?

解决方案 »

  1.   

    问题1:在vc等环境中MAX_PATH等也被宏定义了问题2:确切的说MAX_PATH只是一个建议值,在许多文件名相关的api中,需要提供给api一个缓冲让系统填入文件名,这时MAX_PATH都是一个好的建议值,不过这些api中都会还有有除缓冲之外的另一个参数,这就是缓冲大小.so feel free to use a buffer that is larger.The designers of windows are not so foolish::)
      

  2.   

    _MAX_PATH是NTFS所支持的最长的文件名的长度,MAX_PATH是FAT文件系统所支持的最长文件名的长度。但为了通用,一般用MAX_PATH.
    对于问题2:
    其路径长度有可能超过260,按如下方法
    新建目录a,进入目录a,在目录a下建一个文件,其文件名长度,直到不能输入为止。反加上一级目录,将a的目录名修改为很长(可以成功,这应该是Windows系统的bug),这样上面说的那个文件的路径长度已经超过260了,但操作系统也无法打开它了。
    是限制了文件夹的深度。
      

  3.   

    楼上说的不太准确 一些API的 包括CreateFile的Unicode版本就支持长达32767字节的文件名 但需要加上前缀"\\?\"
      

  4.   

    如果超过260就要用Unicode版本,如FindFirstFileW,详见MSDN
      

  5.   

    前面的 下划线是unicode版的,一般的程序现在还是用ansi开发,至少是你看到的 code
      

  6.   

    其實就我自身的經驗 現在主要是使用Unicode版本 因爲已經很少有人開發專門針對Win98/Me的軟件了 而在NT内核的系統上 編譯成Unicode版本可以減小exe文件大小和加快運行速度 何況切換到ANSI/MBCS版本只需要定義一個宏
      

  7.   

    谢谢大家的回答。
    truemann说“在vc等环境中MAX_PATH等也被宏定义了”,我怎么就找不到呢,就是没找到才疑惑啊。
      

  8.   

    #include <windef.h>
    你的代碼就可以用MAX_PATH了
      

  9.   

    嗯,明白了,由于引用了windows.h,而windows.h中又引用了windef.h,所以可以用MAX_PATH。真的是疑惑了很久啊(明明看到带下划线的,但是用的不带下划线的)。很奇怪Windows为什么要这么定义。