Code Bye

在OFSTRUCT中,OFS_MAXPATHNAME的值为啥会定为 128

在 WINBASE.h 中,有这样的定义:
#define OFS_MAXPATHNAME 128
typedef struct _OFSTRUCT {
    BYTE cBytes;
    BYTE fFixedDisk;
    WORD nErrCode;
    WORD Reserved1;
    WORD Reserved2;
    CHAR szPathName[OFS_MAXPATHNAME];
} OFSTRUCT, *LPOFSTRUCT, *POFSTRUCT;

在API函数OpenFile()  中, szPathName 中会返回所打开文件的完整路径。
本人看了一下,它是ANSI格式编码、支持长文件名。
即使在“DOS时代”,它还没有“长文件名”的概念,路径+文件名的总长度也可以达到255字节;
更何况Windows系统都是支持长文件名的了,路径+文件名的字节数超过255已经是很平常的事了。
那么,在 WINBASE 的定义中,OFSTRUCT的szPathName成员,它为什么才分配128字节的空间?
这不是很容易造成“缓冲区溢出”吗!
有没有哪位高手,给个合理的解释呢?

解决方案

4

MSDN不是写明白了吗,这玩意应该用CreateFile取代,out啦
原文:
The OFSTRUCT structure contains a path string member with a length that is limited to OFS_MAXPATHNAME characters, which is 128 characters. Because of this, you cannot use the OpenFile function to open a file with a path length that exceeds 128 characters. The CreateFile function does not have this path length limitation.

6

16 位的 Windows 上都是 8.3 命名比较多吧,那个时候可能 128 就够用了。微软为了兼容这个 API 才保留的。但这个限制依然是 128,这点很无语。问题是,很多人可能仅仅是图方便,不想去写 CreateFile 的那一大堆参数而已。假如没有路径长度限制,这个 API 用的人应该还很多,虽然它过时了。

4

没准再过几年,题主就会问:_MAX_PATH为啥是260而不是2600了。

4

引用:


本人只是不清楚,MS的程序员,为什么要把这个成员的空间搞这么小。
他明明很清楚这个的作用、明摆着128字节很可能不够用,
干吗定为128?
用256、或用512不行吗!

获取10年后你会说干嘛不定义成1024或2048, 256或512太小了

32


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明在OFSTRUCT中,OFS_MAXPATHNAME的值为啥会定为 128