Я пытаюсь проанализировать аргументы командной строки в файле parse.c, который перебирает все аргументы, а затем передает их в другой файл.Проанализируйте имя файла из командной строки C
У меня возникла проблема, когда пользователь хотел выполнить поиск по определенному текстовому файлу. Я не знаю, есть ли хороший надежный способ проверить, является ли аргумент текстовым файлом.
Ниже приведено то, что я сделал до сих пор. Типичная командная строка может быть
./sgrep -i searchstring file.txt
Так есть ли способ для меня, чтобы 100% идентифицировать файл в командной строке?
for (i=0; i<arguments; i++) {
if (strcmp("-i", args[i])==0) {
data->case_sensitive = 0; /* set case insensitive */
}
else if((len = strlen(args[i])) > 3 && !strcmp(args[i]+len-4, ".txt")){
data->filename = args[i]; /* store textfile name in filename*/
}
else {
data->reg_exp = args[i]; /' store searchstring in regexp */
}
}
Вы имеете в виду иное, чем расширение имени файла? Я не уверен, если вы можете, поскольку файлы .txt не имеют каких-либо специальных заголовков, просто куча двоичных данных, преобразованных в ASCII или любую другую кодировку по вашему выбору. – NadavL
Если файл должен существовать, когда он указан, вы можете просто увидеть, существует ли каждый элемент, который может быть файлом (например, через функцию «доступ (путь, F_OK)», возможно, используя другие флаги для обеспечения удобочитаемости и т. Д. .). Как правило, вы должны использовать что-то вроде функции 'getopt' для синтаксического анализа вашей командной строки, делая эти вещи намного более упрощенными. – mah
Попробуйте открыть файл? Или используйте 'stat()'. –