gpt4 book ai didi

c++ - 路径如何存储在这种结构中,以及如何将其转换为其他结构?

转载 作者:太空狗 更新时间:2023-10-29 20:29:08 28 4
gpt4 key购买 nike

我正在查看 FastCopy 的代码.我想添加一些选项,以便将文件删除到回收站而不是永久删除。

我遇到的第一个问题是路径的存储方式 - 作为 BYTE[1] 类型。我认为它可能是一些指向真实路径的指针,但如果它只是一个字节,则可能不是。完整结构见下:

struct MoveObj {
_int64 fileID;
_int64 fileSize;
enum Status { START, DONE, ERR } status;
DWORD dwFileAttributes;
BYTE path[1];
};

知道这是什么意思吗?

我的第二个问题是我需要将这个字符串转换为一些可怕的 MS 类型,称为“PCZZTSTR”,以便它可以与 SHFILEOPSTRUCT structure 一起使用。 .对我如何进行这种转换有什么建议吗?

最佳答案

单元素数组 path[1]最后 struct只是实现可变大小结构的通用 C 技巧。在 C99 标准之前,C 语言中不允许使用可变大小结构,因此程序员采用这种方式实现。

存储路径的字节序列从该数组的第一个元素 (path[0]) 开始,但为该结构分配的内存多于 sizeof(MoveObj)。 ,因此数组本身的长度超过一个字节。如果数组的长度没有存储在结构中,我猜它是零终止的。

PCZZTSTR 听起来可能很吓人,但本质上它只是一个简单的 C 风格字符串 TCHAR s,以两个 '\0' 结尾人物。 P(指向 a 的指针)、CZ(C 风格、零终止)Z(双重零终止)、T(TCHAR)、STR(字符串)。

您必须转换 path 中的字节至 TCHAR s(在旧平台中是正常的 char s,在基于 Unicode 的现代 Windows 中是 WCHAR s),再放一个 \0在字符串的末尾,你得到了 PCZZTSTR .

关于c++ - 路径如何存储在这种结构中,以及如何将其转换为其他结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11009997/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com