将文件从一个目录移动到另一个目录

时间:2019-02-14 08:59:08

标签: c++ windows file

我正在尝试打印计算机中所有目录中的所有文件名... 我从@mayur编写的代码中获取帮助 我希望它能在我的整个计算机上运行... 因为它应该覆盖我的整个计算机,所以我希望该路径是动态的以覆盖所有驱动器.....

我正在从代码中寻求帮助... 但是在此我必须给一条路.... 我希望它能在我的整个计算机上运行... 因为它应该覆盖我的整个计算机,所以我希望该路径是动态的以覆盖所有驱动器.....

#include <windows.h>
#include <TCHAR.h>
#include <stdio.h>

void Enum(TCHAR root[0xFF])
{
    HANDLE hFind;
    WIN32_FIND_DATA wfd;
    TCHAR GeneralPath[0xFF];
    TCHAR AgainFolder[0xFF];
    TCHAR FileFullPath[0xFF];

    _stprintf(GeneralPath, _T("%s\\*.*"), root);
    hFind = FindFirstFile(GeneralPath, &wfd);

    if(INVALID_HANDLE_VALUE==hFind)
        return;

    do
    {
        if( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) //Checking Founded File Attribute is it File or Folder/Directory
        {
            if( !_tcscmp(wfd.cFileName, _T(".")) || !_tcscmp(wfd.cFileName, _T("..")) ) //if Founded directory is same(.) or parent(..) then ignore them
                continue;
            _stprintf(AgainFolder, _T("%s\\%s"), root, wfd.cFileName);
            Enum(AgainFolder); //Recursion because folder is inside another folder
        }
        else
        {
            _stprintf(FileFullPath, _T("%s\\%s"), root, wfd.cFileName); //  "Folder\\fileName.extension"
            _tprintf(_T("%s\n"),FileFullPath);
        }

    }while(FindNextFile(hFind, &wfd));

    CloseHandle(hFind);
    hFind=INVALID_HANDLE_VALUE;
}
int main()
{
    TCHAR Folder[0xFF]=_T("c:\\windows");
    Enum(Folder);
    return 0;
}

我尝试过使用for循环...

while(1)
    {
        string s="abcdefghijklmnopqrstuvwxyz";
        for(int i=0;i<26;i++)
        {
        string t=s[i]+":\\test";
    TCHAR Folder[0xFF]=_T(t);
    Enum(Folder);
    Sleep(1000);
        }
    }

但这给了我错误。 错误是:: error:必须使用大括号括起来的初始化程序来初始化数组      TCHAR文件夹[0xFF] = _ T(t); 我请您调查一下

结果:仅打印给定路径的结果 预期:我正在尝试打印计算机中所有目录中的所有文件名

1 个答案:

答案 0 :(得分:1)

您的错误是_T宏仅应用于字符串和字符文字。这不是将任何内容都转换为TCHAR字符串的通用方法,因此_T(t)(其中tstring的地方不起作用。

执行上面代码中要尝试做的一种简单方法是

string s = "abcdefghijklmnopqrstuvwxyz";
basic_string<TCHAR> folder(_T("X:\\test")); 
for (int i = 0; i < 26; ++i) { 
    folder[0] = s[i]; 
    Enum(folder.c_str());
}

只需创建正确格式的字符串,并在每次循环时替换驱动器号即可。