1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

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

Тема в разделе "С и С++", создана пользователем okwell5, 31 янв 2011.

Статус темы:
Закрыта.
  1. okwell5

    okwell5 Гость

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

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

    solova Гость

    Репутация:
    0
    Это только просмотр каталога!
    код работает если в настрйках проэкта поставить 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">
    Код:
    #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;
    }
    Хотя алгоритм можешь свой придумать если мой сложный.
    когда освоишь,спрашивай что ещё надо.

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

    Rififi Гость

    Репутация:
    0
    okwell5

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

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

Поделиться этой страницей