Я хочу иметь возможность написать строку в терминале (как показано ниже), который принимает текстовый файл в том же каталоге и вводит его имя в исполняемый файл.
cat fileName | executable
Я хочу иметь возможность прочитать имя файла в код C ++. У меня уже есть код, который получает доступ к строкам и читает файл, он просто получает fileName из стандартного ввода.
Есть ли строка кода или функция для чтения fileName в программе на c ++ и сохранения ее в виде строки? В настоящее время я использую приведенный ниже код для чтения каждой строки текстового файла.
ifstream myfile;
myfile.open(fileName.c_str());
if( myfile.is_open() )
{
while ( getline (myfile ,line) )
{
......
}
}
Все, что вам нужно сделать, это прочитать из stdin переменную (например, «fname»):
int main () {
string fname;
cin >> fname
ifstream myfile;
myfile.open (fname);
if (myfile.is_open() ) {
while ( getline (myfile, line) ) {
...
Для размещения или «передать имя» или «использовать argc / argv» (как делают многие команды * nix):
int main (int argc, char *argv[]) {
string fname;
if (argc == 1) {
cin >> fname
}
else {
fname = argv[1];
}
ifstream myfile;
myfile.open (fname);
if (myfile.is_open() ) {
while ( getline (myfile, line) ) {
...
Когда вы делаете cat filename | executable
Вы отправляете не имя файла в свой исполняемый файл, а его содержимое. Если вы хотите отправить имя, используйте echo filename | executable
или же executable filename
, Тогда вы можете обработать argc
а также argv
как обычно, и выполните обычное чтение файла, которое вы показываете в своем примере кода.
Вы на самом деле неясно, если вы хотите прочитать файл из std::cin
как это будет предоставлено
cat filename | executable
или если вы на самом деле получите имя файла, который нужно открыть, переданный из std::cin
,
Скорее всего, вы хотите иметь необязательный параметр командной строки (передается в int main(int argc, char* argv[])
), и ваш код чтения полагаться на std::istream
входной источник, а не std::cin
или же std::ifstream
жёстко.