как извлечь имена файлов с расширением .txt из текстового файла?

У меня есть текстовый файл с именем myfile.txt, в котором перечислено содержимое диска D:\. В моей программе есть функция, которая читает myfile.txt. Он будет извлекать имена файлов из расширения .txt. Я не очень хорошо разбираюсь в C ++, не могли бы вы сделать его "простым"? Меня смущает начальная позиция подстроки, поскольку я могу узнать, откуда она начнется.

#include<iostream>
#include<string>
#include<fstream>

using namespace std;

int main(void)
{
    system("cls");
    string temp;
    fstream file;
    file.open("D:\\myfile.txt", ios::in);

    while( file.good() )
    {     
        file>>temp;
        string str2, str3;
        size_t pos;

        str2 = temp.substr (4,4); // confused with this

        pos = temp.find(".txt");    // position of ".txt" in temp
        str3 = temp.substr (pos);  

        cout << str2 << ' ' << str3 << endl;
    }

    system("pause");
    return 0;
}

person Mahee    schedule 07.04.2011    source источник
comment
Еще один момент - если вы работаете в системе unix, вы можете выполнить фильтрацию еще до того, как дойдете до своей программы. т.е. find / -type f -iname "*.txt" > textFiles.txt   -  person I82Much    schedule 07.04.2011
comment
Или, если у вас уже есть список, grep 'txt$' < files.txt > textfiles.txt.   -  person Robᵩ    schedule 07.04.2011


Ответы (2)


  • Прочтите текстовый файл, содержащий имя файла.
  • Если имя файла заканчивается на .txt, вставьте его в массив, в противном случае отбросьте.
  • Продолжайте, пока не дойдете до конца файла.

Для справки: ifstream, строка.

person Donotalo    schedule 07.04.2011
comment
как мне убедиться, что он заканчивается на .txt? - person Mahee; 07.04.2011
comment
возьмите подстроку имени файла и сравните, является ли подстрока .txt или нет. Посмотрите на строковую ссылку, которую я предоставил, чтобы узнать, как взять подстроку. - person Donotalo; 07.04.2011
comment
Благодарность!!. Что делать, если я не знаю начальную позицию подстроки, как требуется в строке substr (size_t pos = 0, size_t n = npos) const; как я определю стартовую позицию. - person Mahee; 09.04.2011
comment
Я получил это после компиляции, когда я реализовал программу, как вы предлагали .... Необработанное исключение в 0x7c81eb33 в file.exe: Исключение Microsoft C ++: std :: out_of_range в ячейке памяти 0x0012fc38 .. - person Mahee; 09.04.2011
comment
вы можете оставить параметры по умолчанию. - person Donotalo; 09.04.2011

  1. Загрузить файл, извлечь из него все строки (сохранить в изменяемом списке) (http://www.linuxquestions.org/questions/programming-9/c-text-file-line-by-line-each-строка-строка-массив-126337/)
  2. Прокрутите список и удалите все строки, которые не заканчиваются на .txt (Найдите, если строка заканчивается другой строкой в ​​C ++)
person I82Much    schedule 07.04.2011
comment
Это кажется пустой тратой памяти, если только 0,001% имен файлов оканчиваются на .TXT. Как насчет std::istream_iterator вместо создания первого списка? - person Robᵩ; 07.04.2011
comment
Я согласен, что это не самый эффективный подход. Тем не менее, это, вероятно, самый простой концептуально, и я бы предпочел, чтобы OP получил работающую реализацию и беспокоился об улучшении ее позже, а не беспокоился о ее преждевременной оптимизации. - person I82Much; 07.04.2011