Вывод списка файлов в консоли

  • Автор темы okwell5
  • Дата начала
Статус
Закрыто для дальнейших ответов.
O

okwell5

#1
Задача
На экран должен выводиться заранее составленный список файлов на заданном устройстве и в выбранном каталоге. При выборе какого-либо из файлов внизу экрана выводит-ся первая строка из этого файла, если он текстовой, или сообщение, что файл не является текстовым.

Это задание я попробую сделать сам. Мне нужно только знать все функции, которые здесь необходимо использовать. А то даже не знаю, как и с чего начать. Например, есть ли функция просмотра каталога в консоли?
 
S

solova

#2
Это только просмотр каталога!
код работает если в настрйках проэкта поставить General\Character Set=Use Multi-Byte Character Set
иначе 2 ошибки , и не спрашивай у меня как исправить.
и ещё одна проблема - в список попадают и папки находящиеся в директории поиска,
их можно отличит т.к. у них нету расширения наверняка есть способ это исправить.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Вот код</div></div><div class="sp-body"><div class="sp-content">
C++:
#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;
}
Хотя алгоритм можешь свой придумать если мой сложный.
когда освоишь,спрашивай что ещё надо.

Надеюсь немного помог.
 
R

Rififi

#3
okwell5

На экран должен выводиться заранее составленный список файлов на заданном устройстве и в выбранном каталоге

в зависимости от того, с чем работаешь, можно заюзать findfirst/findnext и/или opendir/readdir
 
Статус
Закрыто для дальнейших ответов.