Переименование файлов

557
08 января 2017, 17:51

Как сделать такое задание: Перед каждым именем файла (regular file) вставить его номер (1, 2, 3 и т. д.). Номер выставляется в соответствии с тем, в каком порядке выдает результаты функция FindFirstFile, FindNextFile.

Смог сделать только это:

#include <windows.h>
#include <iostream>
#include<tchar.h>
using namespace std;
//strcpy, strcat
//_tcscpy,_tcscat
int main()
{
 DWORD dwError = 0;
setlocale(LC_ALL, "rus");
WIN32_FIND_DATA find;
HANDLE hFind = FindFirstFile(_T("C:\\test\\*"), &find);
{
    if (INVALID_HANDLE_VALUE == hFind)
    {
        cout << "Каталог не найден!" << endl;
        system("pause");
        return dwError;
    }
    do {
        if (!(find.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) && !(find.dwFileAttributes == FILE_ATTRIBUTE_DEVICE))
            _tprintf(_T("%s\n"), find.cFileName);
    } while (FindNextFile(hFind, &find) != NULL);
    dwError = GetLastError();
    if (dwError == ERROR_NO_MORE_FILES)
    {
        FindClose(hFind);
        cout << "В каталоге нет файлов!" << endl;
        system("pause");
        return dwError;
    }
}////нет проверки на успешность FindFirstFile
FindClose(hFind); ////нет проверки на успешность FindClose
cout << "Файлы выведены на экран" << endl;
system("pause");
return 0;
}

А как переименовывать файлы не понимаю

Answer 1

Для переименования файлов есть сишная функция rename()

int rename(const char *old_filename, const char *new_filename)

или апишная MoveFile()

BOOL WINAPI MoveFile(
  _In_ LPCTSTR lpExistingFileName,
  _In_ LPCTSTR lpNewFileName
);

Но учтите, что переименовывать файлы внутри цикла FindFirstFile/FindNextFile нельзя. Иначе цикл будет находить новые файлы.

Вам нужно в этом цикле сложить все имена файлов в массив, вызвать FindClose(), а потом пробежаться по этому массиву и переименовать файлы

Answer 2

Поскольку в вашем коде есть функция system("pause") то не грех ей и воспользоваться:

system("rename " + old_name + " " + new_name);
Answer 3

Файлы переименовываются функцией MoveFile.

Функция MoveFile перемещает (переименовывает) файл или каталог (включая его дочерние элементы), или в том же самом каталоге, или во всех каталогах.

READ ALSO
Проверка подключений (Bluetooth и к Сети)

Проверка подключений (Bluetooth и к Сети)

Задача: нужно проверить при запуске, подключено ли приложение к Bluetooth а, также к сети Интернет

309
Запуск повторяющейся сигнализации

Запуск повторяющейся сигнализации

Есть Service в приложении, который запускается при нажатии определённой кнопки (либо при запуске устройства через BroadcastReceiver)

287
Получить ID из View

Получить ID из View

Требуется получить ID объекта в виде String из объекта View

364
Получение данных по сети в разработке под Android

Получение данных по сети в разработке под Android

Всем доброго утра! Проблема заключается в выборе способа: мне требуется забирать некоторый JSON, который отдается на API сервера (Nodejs по некоторому...

403