#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");
}
как подключить функцию?
помогите пожалуйста подключить ее в ф-ию 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);
}
{
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);
}
если можно,подскажите как исправить 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");
}
#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");
}
Надо в вызовах функции строки задавать так: TEXT("строка").
Например: FindFiles(TEXT("C:"),TEXT("*.dat"));
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"));
}
#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"));
}
Цитата:
#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();
}
pszPath выводи.
выдает ошибку error C2065: 'pszPath' : undeclared identifier,но она же определена еще в функции
int main()
{
FindFiles((LPCTSTR)("d:\\photo"));
std::cout<<pszPath;
char responce;
std::cin >> responce;
getch();
}
Дык хь,она ж в FindFiles определена,там и выводи.Даже если б её вызов в main проканал,то ты вывел бы единственный(последний) каталог
но выдает лишь информацию о файле в виде 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;
}
Ошибся немного. Надо fd.cFileName.
где ошибка не понимаю(
"Ошибка" в выводе на консоль юникодной строки
и что с этим делать ,исправьте пожалуйста,очень хочется чтобы программа заработала
Во-вторых, замените все "приведения" к типу LPCTSTR на макрос TEXT() или _T() (если подключен tchar.h, а он у Вас подключен) или просто подставьте L перед кавычками (что, собственно, и делает макрос TEXT(), только в зависимости от того, определен ли у Вас UNICODE).
В-третьих, используйте std::wcout и std::wcin для работы с широкими символами.
После этого программа должна заработать, дальше уже смотрите логику - с ней не все в порядке. Для контроля попробуйте вывести результат не только на консоль, но и в текстовый файл. Список может получиться достаточно длинным, на консоли все дерево не отобразишь.