Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 22.10.2011
Сообщений: 19
1

Функция FileFirstNextFile

26.10.2011, 01:38. Показов 4420. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
выдает ошибку error C2664: 'FindFirstFileW' : cannot convert parameter 1 from 'const char [14]' to 'LPCWSTR',подскажите пожалуйста как исправить?

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
#include <windows.h>
#include <iostream.h>
 
int main()
{
  HANDLE  hFindFile;
  WIN32_FIND_DATA  fd;
 
  // находим первый файл
  hFindFile = FindFirstFile("C:\\demo_dir\\*", &fd);
  if (hFindFile == INVALID_HANDLE_VALUE)
  {
    cerr << "Find first file failed." << endl
      << "The last error code: " << GetLastError() << endl;
    cout << "Press any key to finish.";
    cin.get();
 
    return 0;
  }
  // выводим на консоль имя первого файла
  cout << "The first file name: " << fd.cFileName << endl;
  // находим следующий файл и выводим на консоль его имя
  while (FindNextFile(hFindFile, &fd))
    cout << "The next file name: " << fd.cFileName << endl;
  // закрываем дескриптор поиска
  FindClose(hFindFile);
 
  return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2011, 01:38
Ответы с готовыми решениями:

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба, угу), в которой...

Перегрузка операций: friend-функция или функция-член класса
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов через operator и...

Функция sqrt: существует более одного экземпляра. Функция перегруженная
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; using namespace std; int main(){...

Какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()?
какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()

30
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
28.10.2011, 09:18 21
Author24 — интернет-сервис помощи студентам
Сейчас посмотрим...
0
0 / 0 / 0
Регистрация: 22.10.2011
Сообщений: 19
28.10.2011, 09:24  [ТС] 22
не то ,извиняюсь

Добавлено через 3 минуты
выдает :error C2660: 'FindFiles' : function does not take 1 arguments

Добавлено через 2 минуты
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 <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, (LPTSTR)("*.*"));
 }
 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:\\1"));
     //getch();
     
}
0
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
28.10.2011, 09:26 23
Все работает прекрасно. Что вам мешает модифицировать функцию под себя? Я неоднократно подчеркивал, что второй параметр - константа (!!!). Следовательно, от него можно избавиться.
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
#include <windows.h>
#include <tchar.h>
 
void FindFiles(LPCTSTR pszPath)
{
    TCHAR szFileName[MAX_PATH];
    HANDLE hFind;
    WIN32_FIND_DATA fd;
    
    _tcscpy(szFileName, pszPath);
    _tcscat(szFileName, _T("\\*.*"));
    
    hFind = FindFirstFile(szFileName, &fd);
    if(!hFind) return;
    
    do
    {
        if(!_tcsicmp(fd.cFileName, _T(".")) || !_tcsicmp(fd.cFileName, _T(".."))) continue;
        
        if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
        {
            wsprintf(szFileName, _T("%s\\%s"), pszPath, fd.cFileName);
            FindFiles(szFileName);
        }
        else
        {
            wsprintf(szFileName, _T("%s\\%s"), pszPath, fd.cFileName);
        } // if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes)
    } while(FindNextFile(hFind, &fd));
    
    FindClose(hFind);
}
 
int main()
{
    FindFiles(_T("d:\\videos"));
}
0
0 / 0 / 0
Регистрация: 22.10.2011
Сообщений: 19
28.10.2011, 09:32  [ТС] 24
исправил но все равно пустой экран((
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 <tchar.h>
#include <conio.h>
 
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:\\ARITY"));
        getch();
}
0
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
28.10.2011, 09:35 25
И будет пустым! Где вывод данных на экран, хоть один оператор printf/cout??? Я только дал функцию перебора файлов/каталогов, не более.
1
374 / 321 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
28.10.2011, 15:45 26
korkis, 50% ваших вопросов (и собственно тема сообщения) связаны с тем, что вы не разобрались что такое TCHAR, char и wchar_t. Разберитесь наконец с этим.
0
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
28.10.2011, 15:54 27
bigredcat, я просто умолчал об этом
0
bigredcat
28.10.2011, 16:23
  #28

Не по теме:

GrayWolf, я понимаю, вы просто помогали решить проблему по теме.

0
0 / 0 / 0
Регистрация: 22.10.2011
Сообщений: 19
29.10.2011, 21:52  [ТС] 29
я очень извиняюсь пытаюсь вывести на экран,но выводится лишь информация о файле
#include <windows.h>
#include <tchar.h>
#
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
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);
                        std::cout<<fd.cFileName;
                }
                else
                {
                        wsprintf(szFileName, (LPCTSTR)("%s\\%s"), pszPath, fd.cFileName);
                        std::cout<<fd.cFileName;
                } 
        } while(FindNextFile(hFind, &fd));
        FindClose(hFind);
}
 
int main()
{
        FindFiles((LPCTSTR)("d:\\photo"));
    
    char responce;
   std::cin >> responce;
        getch();
}
0
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
29.10.2011, 22:12 30
Мда... Почитал тему с начала и понял, что мы несколько отклонились от задачи. Которая до сих пор состоит в том, чтобы найти и прочитать файл-список каких-то данных.
Первое. Забудьте, наконец, приведение к типу LPCTSTR и используйте макрос _T() - это намного облегчит жизнь при компиляции и вызовет меньшее количество ошибок при использовании программы.
Второе. Если заранее известно имя файла, из которого нужно считать данные, то нафига мы спрашивается мучаемся с поиском файлов? На крайний случай, если это необходимо, наличие файла-списка можно проверить функцией SearchPath, которая заодно вернет нам его полный путь.
Все верно, я ничего не пропустил?
0
0 / 0 / 0
Регистрация: 22.10.2011
Сообщений: 19
29.10.2011, 22:35  [ТС] 31
"Первое. Забудьте, наконец, приведение к типу LPCTSTR и используйте макрос _T()"
Я бы рад,но в этом случае выдает ошибки при компиляции
что касаемо вывода файла списка,необходимо вывести подкаталоги текущего каталога
Функция SearchPath ищет заданный файл по указанному пути
Но,вроде бы функция поиска в FindFiles осуществляется и если это так,то каталоги на консоль реально вывести?

Добавлено через 6 минут
сама функция интересна, я думаю размер буфера можно присвоить 0 и автоматически ему даст размер 1 мб,скажите пожалуйста это так?,не очень понятны буфер имени искомого файла и компоненты файла.
И можно ли все-таки осуществить через FindFiles ?

C++
1
2
3
4
5
6
7
8
DWORD SearchPath(
  LPCTSTR lpPath,      // путь поиска
  LPCTSTR lpFileName,  // имя файла
  LPCTSTR lpExtension, // расширение файла
  DWORD nBufferLength, // размер буфера
  LPTSTR lpBuffer,     // буфер имени искомого файла
  LPTSTR *lpFilePart   // компоненты файла
);
0
29.10.2011, 22:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2011, 22:35
Помогаю со студенческими работами здесь

Выясните, сохраняет ли булева функция 0, 1, является ли функция линейной, монотонной, само двойственной?
Помогите пожалуйста!!! Булева функция задана вектором значений F(x)=(1001) Выясните, сохраняет...

Функция - Pos(s,s1). Назначение - поиск первого вхождения подстроки s1 в строку s (аналогичная функция C - strstr)
Функция - Pos(s,s1). Назначение - поиск первого вхождения подстроки s1 в строку s (аналогичная...

что за функция такая strstr? или это не функция?
void search(sp *list){ sp *prt = list; char f,r; cout&lt;&lt;Rus(&quot;введите текст&quot;)&lt;&lt;endl; cin&gt;&gt;f;...

Функция нахождения всех суффиксов списка и функция mapIfMy
Добрый день. Пожалуйста, помогите решить 2 задачи: 1. Напишите функцию tails:: -&gt;], находящую...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru