Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как подключить функцию?

74K
26 октября 2011 года
bams
8 / / 26.10.2011
имеется функция FindFiles для вывода дерева каталогов для заданного в командной строке каталога
помогите пожалуйста подключить ее в ф-ию main,чтобы реализовать вывод каталогов


Цитата:
void FindFiles(TCHAR* pszPath, TCHAR* pszMask)
{
TCHAR szFileName[MAX_PATH];
HANDLE hFind;
WIN32_FIND_DATA fd;

wsprintf(szFileName, _T("%s\\%s"), pszPath, pszMask);

hFind = FindFirstFile(szFileName, &fd);
if(!hFind) return;
do
{
if(!lstrcmpi(fd.cFileName, _T(".")) || !lstrcmpi(fd.cFileName, _T(".."))) continue;
if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
{
// "собираем" полный путь для подкаталога и начинаем поиск в нем
wsprintf(szFileName, _T("%s\\%s"), pszPath, fd.cFileName);
FindFiles(szFileName, _T("*.*"));
}
else
{
// "собираем" полный путь для файла
wsprintf(szFileName, _T("%s\\%s"), pszPath, fd.cFileName);
} // if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
} while(FindNextFile(hFind, &fd));

FindClose(hFind);
}

316
27 октября 2011 года
Alm3n
889 / / 29.05.2009
Код:
#include <stdioo.h>
#include <conio.h>
#include <windows.h>

void FindFiles(TCHAR* pszPath, TCHAR* pszMask)
 {
 TCHAR szFileName[MAX_PATH];
 HANDLE hFind;
 WIN32_FIND_DATA fd;

 wsprintf(szFileName, _T("%s\\%s"), pszPath, pszMask);

 hFind = FindFirstFile(szFileName, &fd);
 if(!hFind) return;
 do
 {
 if(!lstrcmpi(fd.cFileName, _T(".")) || !lstrcmpi(fd.cFileName, _T(".."))) continue;
 if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
 {
 // "собираем" полный путь для подкаталога и начинаем поиск в нем
 wsprintf(szFileName, _T("%s\\%s"), pszPath, fd.cFileName);
 FindFiles(szFileName, _T("*.*"));
 }
 else
 {
 // "собираем" полный путь для файла
 wsprintf(szFileName, _T("%s\\%s"), pszPath, fd.cFileName);
 } // if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
 } while(FindNextFile(hFind, &fd));

 FindClose(hFind);
 }

void main(int argc, cahr** argv)
{
      FindFiles("C:","*.dat");
}

Так?
74K
27 октября 2011 года
bams
8 / / 26.10.2011
да,спасибо огромное
если можно,подскажите как исправить 2 ошибки:
error C2664: 'FindFiles' : cannot convert parameter 2 from 'LPCTSTR' to 'TCHAR *'
error C2664: 'FindFiles' : cannot convert parameter 1 from 'const char [3]' to 'TCHAR *'
Цитата:
#include <stdio.h>
#include <conio.h>
#include <windows.h>

void FindFiles(TCHAR* pszPath, TCHAR* pszMask)
{
TCHAR szFileName[MAX_PATH];
HANDLE hFind;
WIN32_FIND_DATA fd;

wsprintf(szFileName, (LPCTSTR)("%s\\%s"), pszPath, pszMask);

hFind = FindFirstFile(szFileName, &fd);
if(!hFind) return;
do
{
if(!lstrcmpi(fd.cFileName, (LPCTSTR)(".")) || !lstrcmpi(fd.cFileName, (LPCTSTR)(".."))) continue;
if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
{
// "собираем" полный путь для подкаталога и начинаем поиск в нем
wsprintf(szFileName, (LPCTSTR)("%s\\%s"), pszPath, fd.cFileName);
FindFiles(szFileName, (LPCTSTR)("*.*"));
}
else
{
// "собираем" полный путь для файла
wsprintf(szFileName, (LPCTSTR)("%s\\%s"), pszPath, fd.cFileName);
} // if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
} while(FindNextFile(hFind, &fd));

FindClose(hFind);
}

void main(int argc, char** argv)
{
FindFiles("C:","*.dat");
}

41K
27 октября 2011 года
kisssko
108 / / 28.10.2010
Тут просто неразбериха с юникодными типами.
Надо в вызовах функции строки задавать так: TEXT("строка").
Например: FindFiles(TEXT("C:"),TEXT("*.dat"));
74K
27 октября 2011 года
bams
8 / / 26.10.2011
а как вторую ошибку исправить :
error C2664: 'FindFiles' : cannot convert parameter 2 from 'LPCTSTR' to 'TCHAR *'
Цитата:
#include <stdio.h>
#include <conio.h>
#include <windows.h>

void FindFiles(TCHAR* pszPath, TCHAR* pszMask)
{
TCHAR szFileName[MAX_PATH];
HANDLE hFind;
WIN32_FIND_DATA fd;

wsprintf(szFileName, (LPCTSTR)("%s\\%s"), pszPath, pszMask);

hFind = FindFirstFile(szFileName, &fd);
if(!hFind) return;
do
{
if(!lstrcmpi(fd.cFileName, (LPCTSTR)(".")) || !lstrcmpi(fd.cFileName, (LPCTSTR)(".."))) continue;
if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
{
// "собираем" полный путь для подкаталога и начинаем поиск в нем
wsprintf(szFileName, (LPCTSTR)("%s\\%s"), pszPath, fd.cFileName);
FindFiles(szFileName, (LPCTSTR)("*.*"));
}
else
{
// "собираем" полный путь для файла
wsprintf(szFileName, (LPCTSTR)("%s\\%s"), pszPath, fd.cFileName);
} // if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
} while(FindNextFile(hFind, &fd));

FindClose(hFind);
}

void main(int argc, char** argv)
{
FindFiles(TEXT("C:"),TEXT("*.dat"));
}

74K
29 октября 2011 года
bams
8 / / 26.10.2011
программа работает,подскажите ,а как теперь вывести на консольку каталоги?
Цитата:

#include <windows.h>
#include <tchar.h>
#include <conio.h>
#include <iostream>

void FindFiles(LPCTSTR pszPath)
{
TCHAR szFileName[MAX_PATH];
HANDLE hFind;
WIN32_FIND_DATA fd;

_tcscpy(szFileName, pszPath);
_tcscat(szFileName, (LPCTSTR)("\\*.*"));

hFind = FindFirstFile(szFileName, &fd);
if(!hFind) return;

do
{
if(!_tcsicmp(fd.cFileName, (LPCTSTR)(".")) || !_tcsicmp(fd.cFileName, (LPCTSTR)(".."))) continue;

if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
{
wsprintf(szFileName, (LPCTSTR)("%s\\%s"), pszPath, fd.cFileName);
FindFiles(szFileName);
}
else
{
wsprintf(szFileName, (LPCTSTR)("%s\\%s"), pszPath, fd.cFileName);
} // if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
} while(FindNextFile(hFind, &fd));

FindClose(hFind);
}

int main()
{
FindFiles((LPCTSTR)("d:\\photo"));
//std::cout<<;
char responce;
std::cin >> responce;
getch();
}

316
29 октября 2011 года
Alm3n
889 / / 29.05.2009
pszPath выводи.
74K
29 октября 2011 года
bams
8 / / 26.10.2011
вывожу :
выдает ошибку error C2065: 'pszPath' : undeclared identifier,но она же определена еще в функции
int main()
{
FindFiles((LPCTSTR)("d:\\photo"));
std::cout<<pszPath;
char responce;
std::cin >> responce;
getch();
}
7
29 октября 2011 года
@pixo $oft
3.4K / / 20.09.2006
Дык хь,она ж в FindFiles определена,там и выводи.Даже если б её вызов в main проканал,то ты вывел бы единственный(последний) каталог
74K
29 октября 2011 года
bams
8 / / 26.10.2011
вывожу:
но выдает лишь информацию о файле в виде 00417848,а не сами каталоги
do
{
if(!_tcsicmp(fd.cFileName, (LPCTSTR)(".")) || !_tcsicmp(fd.cFileName, (LPCTSTR)(".."))) continue;

if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
{
wsprintf(szFileName, (LPCTSTR)("%s\\%s"), pszPath, fd.cFileName);
FindFiles(szFileName);
std::cout<<pszPath;
}
else
{
wsprintf(szFileName, (LPCTSTR)("%s\\%s"), pszPath, fd.cFileName);
std::cout<<pszPath;
}
316
29 октября 2011 года
Alm3n
889 / / 29.05.2009
Ошибся немного. Надо fd.cFileName.
74K
29 октября 2011 года
bams
8 / / 26.10.2011
к сожалению тоже самое
где ошибка не понимаю(
14
30 октября 2011 года
Phodopus
3.3K / / 19.06.2008
"Ошибка" в выводе на консоль юникодной строки
74K
30 октября 2011 года
bams
8 / / 26.10.2011
и что с этим делать ,исправьте пожалуйста,очень хочется чтобы программа заработала
20K
05 ноября 2011 года
sem2711
124 / / 23.09.2009
Во-первых, Вы неверно определяете успех/неуспех функции FindFirstFile(). Сравнивать полученное значение нужно не с нулем, а с INVALID_HANDLE_VALUE. В Вашем коде возврат в случае неудачного вызова не произойдет никогда.
Во-вторых, замените все "приведения" к типу LPCTSTR на макрос TEXT() или _T() (если подключен tchar.h, а он у Вас подключен) или просто подставьте L перед кавычками (что, собственно, и делает макрос TEXT(), только в зависимости от того, определен ли у Вас UNICODE).
В-третьих, используйте std::wcout и std::wcin для работы с широкими символами.
После этого программа должна заработать, дальше уже смотрите логику - с ней не все в порядке. Для контроля попробуйте вывести результат не только на консоль, но и в текстовый файл. Список может получиться достаточно длинным, на консоли все дерево не отобразишь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог