Перемещение файлов из одного каталога в другой - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь напечатать все имена файлов во всех каталогах на моем компьютере ... Я получил помощь от кода, который написан @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;
}

Iпытался использовать цикл 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);
        }
    }

Но это дает мне ошибку .. ошибка: :: ошибка: массив должен быть инициализирован с помощью инициализатора в скобках TCHAR Folder [0xFF] = _ T (t);Я прошу вас посмотреть на это

Результат : печать только для заданного пути ожидается : Я пытаюсь напечатать все имена файлов во всех каталогахв моем компьютере

1 Ответ

0 голосов
/ 14 февраля 2019

Ваша ошибка в том, что макрос _T должен использоваться только для строковых и символьных литералов .Это не универсальный способ преобразования чего-либо в строку TCHAR, поэтому _T(t), где t - это string, не работает.

Один простой способ сделать то, что вы пытаетесь сделать вприведенный выше код:

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());
}

Просто создайте строку правильной формы и заменяйте букву диска каждый раз вокруг цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...