#include "stdafx.h"
#include "windows.h" //FindFirstFile/FindNextFile/FindClose
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,""); // теперь консоль понимает русскую раскладку(и не только но русской достаточно)
int line=0; //количество строк в массивах
char **st,**temp;//указатели на двумерные массивы
st=new char*[line];
temp=new char*[line];
/////////////////////////////////////////////////////////////////
WIN32_FIND_DATA FILEDATA;
HANDLE hFile;
hFile=FindFirstFile("*.*",&FILEDATA);// Проверяет-находит(если есть) первый файл, если есть то цыкл while запустится
// hFile=FindFirstFile("C:\\Downloads\\Фильмы\\*.avi",&FILEDATA); //искать в определённой директории
// искать определённый формат "*.txt" , "*.mp3"
// искать по имени файла "Песенка.*" , "Новый документ.*"
/////////////////////////////////////////////////////////////////
while(GetLastError()==0) // GetLastError() - возвращает "0" если файл найден
{ // тоесть если "FindNextFile",написанная ниже, нашла новый файл
st=new char*[line];
for(int i=0;i<=line;i++)
st[i]=new char[255];
/////////////////////////////////////////////////////////////////////////////////
//задействуется только после второго цикла
//если находится ещё один файл(каторый нашла функция FindNextFile),то существующий(временный) список "temp" копируется в "st"
//PS: "st" на одну ячейку уже болше т.к. в конце цикла while стоит line++; и в начале цикла "st" создаётся заного
if(line!=0)
for(int i=0;i<line;i++)
strcpy_s(st[i],255,temp[i]);
////////////////////////////////////////////////////////////////////////////////
st[line]=FILEDATA.cFileName; // заполняем последнюю ячейку "st" данными о новом файле
temp=new char*[line]; // делаем temp равным st (то есть увеличиваем кол-во строк на 1)
for(int i=0;i<=line;i++)
temp[i]=new char[255];
for(int i=0;i<=line;i++) // и теперь уже новый список st копируем в temp
strcpy_s(temp[i],255,st[i]);
FindNextFile(hFile,&FILEDATA); // проверяем-получаем(если есть ещё файл) новые данные
line++; // не важно есть ещё файл или нету , увеличиваем "количество строк"
}
FindClose(hFile); // прекращаем поиск
//system("cls"); // очистка экрана
for(int t=0;t<line;t++) // выводим на экран
cout<<t<<".file="<<st[t]<<endl;
for(int i=0;i<line;i++) // удоляем временный массив
delete [] temp[i];
///////////////////////////////////////////////////////////////////////////////////
// в итоге у нас есть массив с именами файлов(и папок) и хранится всё это в "st" , а размер массива = line-1
///////////////////////////////////////////////////////////////////////////////////
cout<<"\n\tНажмите Ентер чтобы закрыть преложение";
cin.get();
return 0;
}