Использование argv для чтения текстового файла

Я пытаюсь прочитать текстовый файл, используя argv[1]. В моем коде после сборки argc остается 1 только это означает, что файл не обнаружен. Пожалуйста, смотрите мой код ниже:

#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
 int main(int argc, char **argv) {
    char msg[256]={0};
    if (argc < 2){
        cout<<"file not found";
    }
    if(argc > 1){
        strcpy(msg,argv[1]);
    }
     FILE *file;
     if ((file = fopen(argv[1], "r")) == NULL)
         {
             printf("file doesnt exist\n");
         }
     fclose(file);

    cout<<argv[1];

}

Я не могу понять, как мне получить значение argc больше 1, а затем прочитать содержимое файла?


person Vijay Rana    schedule 27.07.2016    source источник
comment
Какую команду вы использовали для запуска программы? т.е. myexe.exe ????   -  person NathanOliver    schedule 27.07.2016
comment
Передайте аргументы, чтобы получить значение argc больше 1. Как это сделать, будет зависеть от вашей оболочки или IDE, которую вы используете для запуска своей программы.   -  person MikeCAT    schedule 27.07.2016
comment
Вы не должны использовать msg таким образом, потому что argv[1] можно использовать напрямую, а такое копирование допускает переполнение буфера.   -  person MikeCAT    schedule 27.07.2016
comment
@NathanOliver Я пытаюсь запустить его в eclipse и задаю аргумент в «Выполнить-конфигурации», но он все равно не обнаруживает файл для чтения.   -  person Vijay Rana    schedule 27.07.2016
comment
@MikeCATI Я передал аргумент, но он по-прежнему не обнаруживает текстовый файл ... и я изменил msg на argv[1]   -  person Vijay Rana    schedule 27.07.2016
comment
Попробуйте создать файл в текущем каталоге из вашего кода. Возможно, IDE работает с текущим каталогом, а вы работаете из другой папки, чем ваш текстовый файл.   -  person David Thomas    schedule 27.07.2016
comment
Нет, я создал файл в том же каталоге, где находится исходный код. Я попытался создать файл с помощью кода и попробовать его прочитать, но это тоже не сработало. Я запутался, какой именно должен быть аргумент. Должно ли это быть просто имя файла полного пути?   -  person Vijay Rana    schedule 27.07.2016


Ответы (2)


argc остается 1 только это означает, что файл не обнаружен

Если argc равен 1, это означает, что программе не были переданы аргументы (командной строки). Я предлагаю вам изменить ответное сообщение, чтобы отразить это.

как мне получить значение argc больше 1

Вам нужно передать аргумент в программу. В командной строке вы делаете это так:

> ./program_file_name value_of_first_argument

Если вы запускаете программу из IDE, посмотрите в руководстве по IDE, как установить аргументы командной строки для запуска.


Обратите внимание, что если аргумент в вашей программе длиннее 256 символов, то ваш буфер переполняется и поведение не определено.

person eerorika    schedule 27.07.2016
comment
Я использую eclipse, и в конфигурациях запуска я установил рабочий каталог, в котором существует мой файл, и в аргументах я указал имя файла. На выходе получается имя файла, которое я указал в аргументах. Есть ли особый способ сделать это в Eclipse? - person Vijay Rana; 28.07.2016

Вы пытались перетащить файл в свое приложение? это должно дать вам argv[1], если перетаскивание не сработало (что должно было сработать), то что-то пошло не так

или попробуйте использовать ПОЛНЫЙ ПУТЬ, вам не нужно копировать argv[1], просто используйте его напрямую...

person user5962153    schedule 27.07.2016
comment
Я пробовал перетаскивать, но, похоже, это не работает. Под ПОЛНЫМ ПУТЬЮ вы имеете в виду использовать его в качестве аргумента или просто имя файла в качестве аргумента? - person Vijay Rana; 28.07.2016
comment
если это не сработало, что-то пошло не так, я предлагаю вычислить все аргументы: for(int i=0;i‹argc;i++) cout‹‹argv[i]‹‹endl; он показал полный путь к файлу? - person user5962153; 28.07.2016
comment
если ваш cout показывает правильный путь для вашего файла, но имеет значение NULL inf FILE*file, то ваш файл, вероятно, открыт другим приложением. - person user5962153; 29.07.2016
comment
На самом деле, когда я делаю это с помощью командной строки, я получаю желаемый результат (чтение файла с помощью argv). я запутался, что именно я должен указать в аргументах в Run Configurations в Eclipse. Я попытался указать файл .txt в качестве аргумента, но не получил желаемого результата. - person Vijay Rana; 29.07.2016