Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Mikrolab
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 16
1

Поиск файлов в каталоге и изменение имени

20.06.2017, 16:51. Просмотров 862. Ответов 7
Метки нет (Все метки)

Доброго времени суток. Есть имя директории с файлами. Скажите пожалуйста, каким образом можно изменить имена этих файлов при помощи WinApi? Вот что у меня получилось сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <windows.h>
#include "stdafx.h"
#include <iostream>
#include<tchar.h>
using namespace std;
 
//strcpy, strcat
//_tcscpy,_tcscat
 
int _tmain()
{
    DWORD dwError = 0;
    WIN32_FIND_DATA find;
    HANDLE hFind = FindFirstFile(_T("E:\\DZ\\*"), &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;
}
Но мне выдало ошибку: C2065 DWORD: необъявленный идентификатор ConsoleApplication4
И много подобных. Помогите пожалуйста.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2017, 16:51
Ответы с готовыми решениями:

Поиск файлов по маске в каталоге
Программа выполняет поиск файлов в каталоге по заданной маске. Количество...

Получение списка файлов в каталоге
Добрый день. подскажите пожалуйста, как в С++ получить список файлов в...

Программа для создания списка файлов в каталоге
Доброго времени суток. Необходимо написать программу, которая создаст массив с...

Изменение имени файла (самого себя)
Собственно, вопрос в названии. Как изменить имя файла из под себя же? Т.е, если...

Изменение имени при перетаскивании файла на форму
При запуске программа отображает форму (пустую, не важно какую). Если Вы...

7
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
20.06.2017, 23:19 2
Тип проекта правильно выбран?
0
Digit@ll
Brainsbreaker
888 / 366 / 51
Регистрация: 01.02.2011
Сообщений: 1,586
21.06.2017, 00:19 3
nmcf, ему нужно первую строку кода со второй местами поменять, для начала.

Не по теме:

Где они такое находят и неужели еще у кого-то работало?

0
Mikrolab
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 16
21.06.2017, 00:33  [ТС] 4
С этии я уже решил проблему, код заработал(считывает всё верно), осталось только что бы менялось имя файлов в директории. Как это реализировать?
0
fastb1t
Software Developer
252 / 179 / 96
Регистрация: 03.05.2017
Сообщений: 645
Завершенные тесты: 1
21.06.2017, 01:26 5
Цитата Сообщение от Mikrolab Посмотреть сообщение
осталось только что бы менялось имя файлов в директории. Как это реализировать?
Используйте MoveFile или rename
0
Mikrolab
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 16
21.06.2017, 01:56  [ТС] 6
Я несколько часов розбирался в этих функциях и увы ничего не сделал, у меня попросту ничего не происходило. Я только сегодня в обед впервой вообще узнал более подробно об WinApi. Если можно подскажите на примере как именно это реализовать? По примерам я и написал этот код) Вообще задание звучало так: Написать программу при где в определёной директории все файлы(к примеру 10 файлов *.txt) буду переименововаться ( по какому принципу не было сказано, потому пусть будет просто по порядку 1, 2 и тд) при использовании WinApi. Можете помочь пожалуйста
0
fastb1t
Software Developer
252 / 179 / 96
Регистрация: 03.05.2017
Сообщений: 645
Завершенные тесты: 1
21.06.2017, 14:38 7
Лучший ответ Сообщение было отмечено Mikrolab как решение

Решение

Цитата Сообщение от Mikrolab Посмотреть сообщение
Написать программу при где в определёной директории все файлы(к примеру 10 файлов *.txt) буду переименововаться ( по какому принципу не было сказано, потому пусть будет просто по порядку 1, 2 и тд) при использовании WinApi
У меня решение есть, только оно на Visual C++ не запустится вроде (вы же этой средой пользуетесь?)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <cstdio>
#include <windows.h>
 
bool get_expansion (char *in, char *out)
{
    int dot_position = 0;
    for (int i = strlen (in); i >= 0; i --)
         if (in [i] == '.')
              dot_position = i;
    if (dot_position == 0 || dot_position == strlen (in))
         return false;
    else
    {
         char temp [2];
         for (int i = dot_position; i < strlen (in); i ++)
         {
              wsprintf (temp, "%c", in [i]);
              strcat (out, temp);
         }
         return true;
    }
}
 
bool RenameAllFiles_no_recursive (char *PATH)
{
    char mask [MAX_PATH];
    wsprintf (mask, "%s*.*", PATH);
    
    WIN32_FIND_DATA wfd;
    HANDLE handle = FindFirstFile (mask, &wfd);
    if (handle != INVALID_HANDLE_VALUE)
    {
         int k = 1;
         do
         {
              if (strcmp (wfd.cFileName, ".") && strcmp (wfd.cFileName, "..") && strcmp (wfd.cFileName, "$RECYCLE.BIN") && 
                  wfd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY && wfd.dwFileAttributes != FILE_ATTRIBUTE_DEVICE)
              {
                   char from [MAX_PATH];
                   char to [MAX_PATH];
                   
                   char expansion [128] = {'\0'};
                   get_expansion (wfd.cFileName, expansion);
                   
                   wsprintf (from, "%s%s", PATH, wfd.cFileName);
                   if (!strcmp (expansion, ""))
                        wsprintf (to, "%s%d", PATH, k);
                   else
                        wsprintf (to, "%s%d%s", PATH, k, expansion);
                   
                   //rename (from, to);
                   MoveFile (from, to);
                   k ++;
              }
         } while (FindNextFile (handle, &wfd));
         FindClose (handle);
         return true;
    }
    return false;
}
 
int main (int argc, char **argv)
{
    if (RenameAllFiles_no_recursive ("D:\\"))
         printf ("Complete!");
    else
         printf ("Error! Files are not renamed!");
    getchar ();
    return 0;
}
1
Mikrolab
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 16
22.06.2017, 12:01  [ТС] 8
Цитата Сообщение от decrement Посмотреть сообщение
У меня решение есть, только оно на Visual C++ не запустится вроде (вы же этой средой пользуетесь?)
Я запустил проект, всё работает отлично. Огромное все спасибо, вы меня выручили)
Запустил в Visual C++ просто отключив кодировку Юникод и добавил stdafx.h

Добавлено через 13 часов 8 минут
decrement, Можешь еще написать коментарии по коду? Что происходит в коде. К примеру зачем $RECYCLE.BIN и тд.
0
22.06.2017, 12:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2017, 12:01

Запись в файл имени всех файлов в директории
Нужно записать имена файлов из папка в другой файл который я создаю и заменяю...

Поиск программы как по имени окна, так и по процессу
Мне надо сделать поиск программ и если они были запущенны то что то происходило...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru