Работа с файлами c++ через аргументы в терминале Linux

Задача следующая: программа с++ (на linux, через unistd.h) принимает имя файла в качестве аргумента командной строки. Если расширение файла - .txt, то необходимо его вывести на экран, иначе - просто вывести аргумент. В целом, я примерно понимаю, как можно это сделать, но совершенно ничего не получается... Вот мой примерный код:

#include <iostream>
#include <ifstream>
#include <unistd.h>
int main(int argc, char* argv){
    if (argc > 0){
        char a;
        int i{0};
        while(argv[i] != NULL){
            a = argv[i];
            if(a.substr(-4,4) == '.txt.){
                char c;
                ifstream F;
                F.open(a, ios::in);
                std::cout << F;
            } else {
                std::cout << a;
            }
            i++;
        }
    }
    return 0;
}

Язык учу в институте, уже знаем про указатели, многомерные массивы, функции, директивы препроцессора и т.д., но я пропустил довольно много занятий, потому и возникают сложности... Если кто-то ещё и сможет объяснить, буду благодарен!


Ответы (2 шт):

Автор решения: Harry

Вот, разберитесь только, как это работает:

int main(int argc, char * argv[])
{
    for(int i = 1; i < argc; ++i)
    {
        if (strlen(argv[i]) >= 4 && _stricmp(argv[i]+strlen(argv[i])-4,".txt") == 0)
        {
            ifstream in(argv[i]);
            if (!in.is_open())
                cout << ">>>>> Error reading " << argv[i] << endl;
            else
                for(string s; getline(in,s); cout << s << "\n");
        }
        else
            cout << ">>>>> argv[" << i << " ] = " << argv[i] << endl;
    }
}
→ Ссылка
Автор решения: Vann Kult

Спасибо за помощь Harry from Kiev

#include <iostream>
#include <fstream>
#include <string.h>

int main(int argc, char * argv[])
{
    for(int i = 1; i < argc; ++i)
    {
        if (strlen(argv[i]) >= 4 && strncmp(argv[i]+strlen(argv[i])-4,".txt", 4) == 0)
        {
            std::ifstream in(argv[i]);
            if (!in.is_open())
                std::cout << "----- Error reading " << argv[i] << std::endl;
            else
                for(std::string s; getline(in,s); std::cout << s << "\n");
            
        }
        else
            std::cout << "----- argv[" << i << "] = " << argv[i] << std::endl;
    }
}
→ Ссылка