Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2018, 17:51   #1
sasha7971182
Новичок
Джуниор
 
Регистрация: 13.05.2018
Сообщений: 4
Восклицание [C++] winAPI, написать программу, которая бы по маске искала файл везде + выводила путь до найденного файла.

Была задача написать программу, которая бы по маске искала файл везде + выводила путь до найденного файла.
Ну я написал, но вышло криво и не правильно. Нужна помощь

Код:
#include <iostream>
#include <windows.h>
#include <io.h>
#include <dir.h>
#include <locale.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#define MAX_PATH 260

using namespace std;

bool Search_File(TCHAR *buffer, char mas[])
{
	HANDLE file;
	WIN32_FIND_DATA ffd = {0};
	TCHAR temp[MAX_PATH];
	TCHAR str[MAX_PATH];
   
	
	file = FindFirstFile(TEXT(mas),&ffd);
	
	
	if (file == INVALID_HANDLE_VALUE) {
		cout <<"Файл не был найден"<<endl;
		return false;
	}
	else{
		do{
			if(!strcmp(ffd.cFileName, TEXT("."))||!strcmp(ffd.cFileName, TEXT(".."))){
				continue;
			}	
			if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){//если не установлен бит, тогда файл
				strcpy(temp, buffer);
				
				strcat(temp, "\\");
				strcat(temp, ffd.cFileName);
				
				Search_File(buffer, mas);
				
				strcpy(buffer, temp);
                           
				continue;
			}
			cout <<"найденый файл:"<<ffd.cFileName<<endl;
            cout <<buffer<<endl;
		}
		while(FindNextFile(file,&ffd) != 0);	
	}
	FindClose(file);
	
	return true;	
}

int main(int argc, TCHAR* argv[])
{
	setlocale(LC_ALL,"RUS");
	
	char mas[MAX_PATH];
	cin.getline(mas,MAX_PATH,'\n');
	
	
	
	for (CHAR drive[4] = "A:\\"; *drive <= 'Z'; *drive += 1) {
		TCHAR buffer[MAX_PATH];
    	UINT driveType = GetDriveType(drive);
    
    	if (driveType != DRIVE_UNKNOWN && driveType != DRIVE_NO_ROOT_DIR) {
       		drive[3] = '\0';
       		drive[3] = '\\';
       		
       		strcat(buffer,drive);
              
    		if (!Search_File(buffer,mas)){
				continue;
			}
    	
    }
}
	
	
	getch();
	return 0;
}
sasha7971182 вне форума Ответить с цитированием
Старый 13.05.2018, 18:13   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Начнем с простого:
Код:
drive[3] = '\0';
drive[3] = '\\';
Что вы этим хотели сказать?
p51x вне форума Ответить с цитированием
Старый 13.05.2018, 18:15   #3
sasha7971182
Новичок
Джуниор
 
Регистрация: 13.05.2018
Сообщений: 4
По умолчанию

drive[3] = '\0'; - явно лишнее, ну вообще я хотел чтобы получалось C:\\ например. И тип искать файл с диска и бегая по папкам, а потом вызывать функцию от некст диска D:\\ например
sasha7971182 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно написать программу которая считывает из файла f целые числа и записывает их в файл h или g Гарри Паскаль, Turbo Pascal, PascalABC.NET 1 19.11.2015 18:27
Написать программу, которая в файл g записывает положительные числа, а файл h - отрицательные Гарри Паскаль, Turbo Pascal, PascalABC.NET 1 12.11.2015 22:43
Написать программу, которая создает файл МарияА Помощь студентам 1 28.11.2014 16:56
Написать программу на с++, которая считывает текст из файла.. Дюша Помощь студентам 0 26.04.2012 19:09
Как написать БД, которая работает везде? =) FeNr1z168 БД в Delphi 6 17.02.2009 08:48