【问题标题】:C++: How to change 'PCZZWSTR' type to 'char' or vice versa?C++:如何将“PCZZWSTR”类型更改为“char”,反之亦然?
【发布时间】:2013-09-21 22:52:01
【问题描述】:

在 Visual Studio 的 C++ 中,我尝试使用循环动态复制文件夹。为此,我使用sprintf 函数将文件夹更改如下:

char sourceName[1000];
char dstName[1000];
SHFILEOPSTRUCT sf;
memset(&sf, 0, sizeof(sf));
sf.hwnd = 0; 
sf.wFunc = FO_COPY;

for (int i=1; i<100; i++)
{
    sprintf(sourceName, "C://Samples//%d//",i);
    sprintf(dstName, "U://NewData//%d//",i);
    sf.pFrom = sourceName;
    sf.pTo = dstName;
}

但是 sf.pFrom 和 sf.pTo 的行给出错误提示:

Error: a value of type "char*" cannot be assigned to an entity of type PCZZWSTR. 

我尝试在声明它们时将 sourceName 和 dstName 更改为 PCZZWSTR 类型:

PCZZWSTR sourceName;
PCZZWSTR dstName;

但这一次 sprintf 函数不接受它们。那么有什么解决方案吗?提前致谢。

【问题讨论】:

  • 您没有使用宽字符作为开始。你也没有双空终止它们。
  • @chris:我不完全理解。能否请您更深入地解释一下?

标签: c++ visual-c++ copy directory


【解决方案1】:

我在您的代码中发现了几个问题。

  1. 首先,删除文件名'//' 中的双斜杠。因为'\' 是转义字符,所以只需要加倍反斜杠。
  2. 使用wsprintf 而不是sprintf。使用wchar_ts 而不是chars。
  3. 阅读SHFILEOPSTRUCT 是什么。它的成员pFrompTo一个或多个 文件名。它们必须以双空结尾。

【讨论】:

    猜你喜欢
    • 2021-06-10
    • 1970-01-01
    • 2011-04-11
    • 2020-03-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 2020-12-29
    • 2021-01-01
    相关资源
    最近更新 更多