2015-12-17 4 views
0

Я пытаюсь проанализировать аргументы командной строки в файле 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 */ 
    } 
    } 
+0

Вы имеете в виду иное, чем расширение имени файла? Я не уверен, если вы можете, поскольку файлы .txt не имеют каких-либо специальных заголовков, просто куча двоичных данных, преобразованных в ASCII или любую другую кодировку по вашему выбору. – NadavL

+0

Если файл должен существовать, когда он указан, вы можете просто увидеть, существует ли каждый элемент, который может быть файлом (например, через функцию «доступ (путь, F_OK)», возможно, используя другие флаги для обеспечения удобочитаемости и т. Д. .). Как правило, вы должны использовать что-то вроде функции 'getopt' для синтаксического анализа вашей командной строки, делая эти вещи намного более упрощенными. – mah

+0

Попробуйте открыть файл? Или используйте 'stat()'. –

ответ

1

Сначала я должен убедиться, что файл существует с lstat. Помимо этого, я бы сказал, что вам нужно решить, хотите ли вы больше о ложных срабатываниях или ложных негативах. Кроме того, вам нужно решить, что вы классифицируете как текстовый файл. Вас беспокоит, есть ли некоторые текстовые файлы, которые пропущены, если у них нет расширения .txt? Если вы это сделаете, то проверьте это. Вы можете открыть файл и просмотреть не-ASCII-символы. Вы также можете просто взглянуть на первые 8 байтов или около того, чтобы искать не-ASCII, чтобы связать проблему.