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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 05.08.2009, 08:37   #11
Flippp
Пользователь
 
Регистрация: 05.03.2009
Сообщений: 62
По умолчанию

я понимаю в обычную функцию так:
Код:
 void find(LPCTSTR lpszFileName, BOOL bInnerFolders)
Flippp вне форума
Старый 05.08.2009, 09:29   #12
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Цитата:
Сообщение от Flippp Посмотреть сообщение
я понимаю в обычную функцию так:
Код:
 void find(LPCTSTR lpszFileName, BOOL bInnerFolders)
Все же так:
Код:
bool seek(LPCTSTR lpszFileName, BOOL bInnerFolders)
Функция возвращает булевое значение успеха/неудачи поиска.

Последний раз редактировалось oleg kutkov; 05.08.2009 в 09:33.
oleg kutkov вне форума
Старый 05.08.2009, 09:51   #13
Flippp
Пользователь
 
Регистрация: 05.03.2009
Сообщений: 62
По умолчанию

Код:
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <iostream.h>
bool seek(LPCTSTR lpszFileName, BOOL bInnerFolders)
{
	LPTSTR part;
	char tmp[MAX_PATH];				// temporary array
	char name[MAX_PATH];

	HANDLE hSearch = NULL;
	WIN32_FIND_DATA wfd;
	memset(&wfd, 0, sizeof(WIN32_FIND_DATA));

	//search in embeded folders for first
	if(bInnerFolders)
	{
		if(GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0) 
			return FALSE;
		lstrcpy(name, part);
		lstrcpy(part, "*.*");

		//if folder exists, down to it
		wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
		if (!((hSearch = FindFirstFile(tmp, &wfd)) == INVALID_HANDLE_VALUE))
			do
			{
				//if current folder is a service folders? which no need to check
				if (!strncmp(wfd.cFileName, ".", 1) || !strncmp(wfd.cFileName, "..", 2))            
					continue;
				if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //if it's a folder
				{
					// making a new path
					char next[MAX_PATH];
					if(GetFullPathName(lpszFileName, MAX_PATH, next, &part) == 0) return FALSE;
					lstrcpy(part, wfd.cFileName);
					lstrcat(next, "\\");
					cout << next << endl;
					lstrcat(next, name);
					//recourse down
					seek(next, TRUE);
				}
			}
			while (FindNextFile(hSearch, &wfd)); //finding next file in folder
			FindClose (hSearch); // closing a search descriptor
	}
	if ((hSearch = FindFirstFile(lpszFileName, &wfd)) == INVALID_HANDLE_VALUE) 
		return TRUE; 
	do
	if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // is it's a file
	{
		char file[MAX_PATH];
		if(GetFullPathName(lpszFileName, MAX_PATH, file, &part) == 0) return FALSE;
		lstrcpy(part, wfd.cFileName);
		
		//adding its to a result list
		cout << file << endl;
	}
	while (FindNextFile(hSearch, &wfd));	// next file in folder
	FindClose (hSearch);					// close search descriptor

	return TRUE;
}
этот код компилю все good и вот ошибка:

[Linker error] undefined reference to `WinMain@16'

32:2 C:\Dev-Cpp\include\c++\3.4.2\backward\back ward_warning.h ld returned 1 exit status
Flippp вне форума
Старый 05.08.2009, 10:07   #14
Flippp
Пользователь
 
Регистрация: 05.03.2009
Сообщений: 62
По умолчанию

я так понял что в коде нету int main()
и надо его включить.
Flippp вне форума
Старый 05.08.2009, 11:01   #15
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Разумеется у вас должна быть главная функция, с которой начинается выполнение программы. Только, вот судя по ошибке
undefined reference to `WinMain@16'
- Вы создали проект Win32 графического приложения. Соответственно компилятор ищет не main(), а WinMain(). Вы сами придумываете себе трудности.
Создайте новый КОНСОЛЬНЫЙ проект, обязательно создайте там функцию main() и из нее вызывайте Ваш seek.
oleg kutkov вне форума
Старый 05.08.2009, 11:27   #16
Flippp
Пользователь
 
Регистрация: 05.03.2009
Сообщений: 62
По умолчанию

Код:
#include <cstdlib>
#include <iostream>
#include <windows.h>

using namespace std;

int main(int argc, char *argv[])
{
  bool seek(LPCTSTR lpszFileName, BOOL bInnerFolders)
{                           //на эту скобку ругается
	LPTSTR part;
	char tmp[MAX_PATH];				// temporary array
	char name[MAX_PATH];

	HANDLE hSearch = NULL;
	WIN32_FIND_DATA wfd;
	memset(&wfd, 0, sizeof(WIN32_FIND_DATA));
	
	//search in embeded folders for first
	if(bInnerFolders)
	{
		if(GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0) 
			return FALSE;
		lstrcpy(name, part);
		lstrcpy(part, "*.*");

		//if folder exists, down to it
		wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
		if (!((hSearch = FindFirstFile(tmp, &wfd)) == INVALID_HANDLE_VALUE))
			do
			{
				//if current folder is a service folders? which no need to check
				if (!strncmp(wfd.cFileName, ".", 1) || !strncmp(wfd.cFileName, "..", 2))            
					continue;
				if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //if it's a folder
				{
					// making a new path
					char next[MAX_PATH];
					if(GetFullPathName(lpszFileName, MAX_PATH, next, &part) == 0) return FALSE;
					lstrcpy(part, wfd.cFileName);
					lstrcat(next, "\\");
					cout << next << endl;
					lstrcat(next, name);
					//recourse down
					seek(next, TRUE);
				}
			}
			while (FindNextFile(hSearch, &wfd)); //finding next file in folder
			FindClose (hSearch); // closing a search descriptor
	}
	if ((hSearch = FindFirstFile(lpszFileName, &wfd)) == INVALID_HANDLE_VALUE) 
		return TRUE; 
	do
	if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // is it's a file
	{
		char file[MAX_PATH];
		if(GetFullPathName(lpszFileName, MAX_PATH, file, &part) == 0) return FALSE;
		lstrcpy(part, wfd.cFileName);
		
		//adding its to a result list
		cout << file << endl;
	}
	while (FindNextFile(hSearch, &wfd));	// next file in folder
	FindClose (hSearch);					// close search descriptor

	return TRUE;
}
}
Создал консольный проект и ругается на скобку

a function-definition is not allowed here before '{' token

expected `,' or `;' before '{' token
Flippp вне форума
Старый 05.08.2009, 11:43   #17
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Ну посмотрите, что вы написали: объявили одну функцию, внутри другой (да еще и главной).
main - отдельная функция.
seek - другая функция.

Вот Вам полный работоспособный код:
Код:
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;

//функция поиска
bool seek(LPCTSTR lpszFileName, BOOL bInnerFolders)
{                     
	LPTSTR part;
	char tmp[MAX_PATH];				// temporary array
	char name[MAX_PATH];

	HANDLE hSearch = NULL;
	WIN32_FIND_DATA wfd;
	memset(&wfd, 0, sizeof(WIN32_FIND_DATA));
	
	//search in embeded folders for first
	if(bInnerFolders)
	{
		if(GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0) 
			return FALSE;
		lstrcpy(name, part);
		lstrcpy(part, "*.*");

		//if folder exists, down to it
		wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
		if (!((hSearch = FindFirstFile(tmp, &wfd)) == INVALID_HANDLE_VALUE))
			do
			{
				//if current folder is a service folders? which no need to check
				if (!strncmp(wfd.cFileName, ".", 1) || !strncmp(wfd.cFileName, "..", 2))            
					continue;
				if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //if it's a folder
				{
					// making a new path
					char next[MAX_PATH];
					if(GetFullPathName(lpszFileName, MAX_PATH, next, &part) == 0) return FALSE;
					lstrcpy(part, wfd.cFileName);
					lstrcat(next, "\\");
					cout << next << endl;
					lstrcat(next, name);
					//recourse down
					seek(next, TRUE);
				}
			}
			while (FindNextFile(hSearch, &wfd)); //finding next file in folder
			FindClose (hSearch); // closing a search descriptor
	}
	if ((hSearch = FindFirstFile(lpszFileName, &wfd)) == INVALID_HANDLE_VALUE) 
		return TRUE; 
	do
	if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // is it's a file
	{
		char file[MAX_PATH];
		if(GetFullPathName(lpszFileName, MAX_PATH, file, &part) == 0) return FALSE;
		lstrcpy(part, wfd.cFileName);
		
		//adding its to a result list
		cout << file << endl;
	}
	while (FindNextFile(hSearch, &wfd));	// next file in folder
	FindClose (hSearch);					// close search descriptor

	return TRUE;
}
//главная функция   
int main()
{
/*
Вызываем функцию seek, указав ей искать все *.txt файлы на диске
C:\, так же второй параметр, false, говорит функции не заглядывать
во вложенные каталоги, а искать только в корневом). Если задать этот
параметр как true - программа начнет перебирать все каталоги.
Так же мы проверяем значение, которое возвращает функция, если это false - выводим сообщение об ошибке.
*/
	if(!seek("c:\\*.txt", false))
		cout << "Searching failed" << endl;
	return 0;
}
oleg kutkov вне форума
Старый 05.08.2009, 11:57   #18
Flippp
Пользователь
 
Регистрация: 05.03.2009
Сообщений: 62
По умолчанию

Действительно работает спасибо большое!!
На будушее учту все замечания
Flippp вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить процент больших и маленьких букв ко всему тексту Kirra Паскаль, Turbo Pascal, PascalABC.NET 3 08.12.2011 05:46
Поиск файла Cpluser Общие вопросы C/C++ 4 03.03.2009 11:30
Этот сайт может нанести вред Вашему компьютеру - Что с Google? Levsha100 Свободное общение 12 01.02.2009 21:09
Поиск файла БД D-mon БД в Delphi 12 29.05.2008 13:26
Как подключиться к компьютеру (схема прилагается) Air Софт 6 08.05.2008 16:01