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

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

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

    okwell5 Гость

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

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

    solova Гость

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

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

    Rififi Гость

    okwell5

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

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

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