Работа с файлами 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;
}
}