如何将路径存储在这种结构中,以及如何将其转换为其他内容

How can a path be stored in this kind of structure, and how to convert it to something else?

本文关键字:转换 其他 存储 路径 结构      更新时间:2023-10-16

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

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

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

知道这意味着什么吗?

我的第二个问题是我需要将此字符串转换为称为"PCZZTSTR"的可怕MS类型,以便它可以与SHFILEOPSTRUCT结构一起使用。任何建议我如何进行此转换?

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

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

PCZZTSTR 可能听起来很可怕,但本质上它只是一个简单的 C 样式的 TCHAR s 字符串,以两个''字符结尾。P(指向 a 的指针)、CZ(C 样式,零端端)、Z(双零端接)、T (TCHAR)、STR(字符串)。

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

相关文章: