【问题标题】:WinApi with text files带有文本文件的 WinApi
【发布时间】:2014-11-25 19:05:39
【问题描述】:

我需要将所有文件从 1 个目录复制到另一个目录,但它不起作用。

   #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    #include <string>

using namespace std;

int main(int argc, char *argv[])
{
    TCHAR buffer[256];
    SetCurrentDirectory ("C:\\Users\\Rinat\\Desktop\\SP\\1");
    GetCurrentDirectory (sizeof (buffer), buffer);
    printf ("%s\n", buffer);
    WIN32_FIND_DATA FindData;
    HANDLE MyFile;

    MyFile = FindFirstFile ("*", &FindData);
    if (MyFile != INVALID_HANDLE_VALUE) {
    do {
    printf ("%s\n", FindData.cFileName);

         CopyFile("C:\\Users\\Rinat\\Desktop\\SP\\1"+FindData.cFileName, "C:\\Users\\Rinat\\Desktop\\SP\\2\\" + FindData.cFileName, FALSE);

      } while (FindNextFile (MyFile, &FindData));
   FindClose (MyFile);
}

    system("PAUSE");
    return EXIT_SUCCESS;
}

错误是 22 C:\Users\Rinat\Desktop\SP\7.cpp 类型为const char[28]CHAR[260] 的无效操作数到二进制operator+

【问题讨论】:

  • 您不能使用运算符“+”附加字符缓冲区。特别是,这不起作用:"C:\\Users\\Rinat\\Desktop\\SP\\1"+FindData.cFileName.
  • 如果你只是要把TCHAR提供给期望char的东西,你为什么还要使用它?
  • 使用std::stringstd::wstring。不管它是什么,给每一个你称之为宽字符串的 winapi 东西。
  • @chris TCHAR 与此有何关系? @RinatBaiguzhinov 查看发布的答案。
  • @bialpio,嗯,这不是一个答案,但如果你只是假设它是一个或其他。更不用说TCHAR 早已过时了。

标签: c++ winapi text


【解决方案1】:

您不能像在 C++ 中那样将字符串指针添加在一起。您需要使用一个函数(或类似std::string 的类)。

do {
    char chSrc[MAX_PATH], cdDst[MAX_PATH];
    StringCchCopy(chSrc, MAX_PATH, "C:\\Users\\Rinat\\Desktop\\SP\\1\\");
    StringCchCat(chSrc, MAX_PATH, FindData.cFileName);
    StringCchCopy(chDst, MAX_PATH, "C:\\Users\\Rinat\\Desktop\\SP\\2\\");
    StringCchCat(chDst, MAX_PATH, FindData.cFileName);
    CopyFile(chSrc, chDst, TRUE);
} ...

使用std::string

do {
    CopyFile((std::string("C:\\Users\\Rinat\\Desktop\\SP\\1\\") + FindData.cFileName)).c_str(),
             (std::string("C:\\Users\\Rinat\\Desktop\\SP\\2\\") + FindData.cFileName)).c_str(),
             TRUE);
} ...

【讨论】:

  • TCHAR 怎么样?据我所知,如果 OP 在 unicode 支持下编译,上述方法将不起作用。
  • @bialpio:OP 显然没有在 unicode 支持下编译(因为他所有的字符串文字都是 ansi)所以我认为给他代码更有意义,他可以随便玩。正如你上面所说,Ansi/Unicode 问题与他的主要问题无关,即误解字符串在 C++ 中的工作方式。
  • @RinatBaiguzhinov CopyFile 只复制文件。如果您想知道如何复制文件夹,那将是一个单独的问题。
猜你喜欢
  • 2013-11-30
  • 2014-06-25
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
相关资源
最近更新 更多