-2

I am making a C++ program which should be able to list the files from particular directory and save each file name as a string(which will be processed further for conversion). Do I need array of strings? Which functionality should I use. The number of files is not fixed. Main thing is I can't enter the names manually. I must accept the names from the list generated.

arshpreet
  • 679
  • 2
  • 11
  • 27

2 Answers2

0

In this case you want to use a vector:

#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> file_names;

    file_names.push_back("file1.txt");
    file_names.push_back("file2.txt");
    file_names.push_back("file3.txt");
    file_names.push_back("file4.txt");

    return 0;
}
Gillespie
  • 5,780
  • 3
  • 32
  • 54
  • Files list are generated by another program as a string. – arshpreet Dec 10 '14 at 16:13
  • So what's the problem? – Gillespie Dec 10 '14 at 16:16
  • Don't you think I need deque? If the following link is not wrong? http://stackoverflow.com/questions/10699265/how-can-i-efficiently-select-a-standard-library-container-in-c11 – arshpreet Dec 10 '14 at 16:53
  • You wouldn't enter in the file names manually, you would have a `string` variable that holds the value that you want to put into the vector. Where is this magical list of file names coming from, anyway? – Gillespie Dec 10 '14 at 18:58
  • Here is the program.https://gist.github.com/vivithemage/9517678 After "cout" want to save it into vector array so it can be used by magic++ for conversions of images. Basically I am listing all the .CR2 files and converting them into .PNG – arshpreet Dec 11 '14 at 03:01
0

Have you thought about using some command line tools to deal with this? Even input redirection will work for this. Example:

./Cpp < echo somedir/*

Where Cpp is the name of your compiled binary, and somedir is the directory you want to read from

Then in your c++ program, you simply use std::cin to read each filename from standard in.

#include <vector>
#include <string>
#include <iterator> // std::istream_iterator, std::back_inserter
#include <algorithm> //std::copy
#include <iostream> // std::cin


int main()
{
    std::vector<string> file_names;

    // read the filenames from stdin
    std::copy(std::istream_iterator<std::string>(std::cin), std::istream_iterator<std::string>(), std::back_inserter(file_names));

    // print the filenames
    std::copy(file_names.begin(), file_names.end(), std::ostream_iterator<std::string>(std::cout, "\n"));

    return 0;
}
smac89
  • 39,374
  • 15
  • 132
  • 179