C:如何打开以特定扩展名结尾的文件

时间:2020-04-29 15:58:10

标签: c

我需要创建一个程序来读取扩展名为“ .deck”的文件。也就是说,程序参数应为-d1 <name>.deck。必须始终写入-d1字符串,并且必须强制使用.deck扩展名,<name>可以是具有任何给定长度的任何给定字符串。 .deck文件基本上是带有扑克牌的文本文件。 谢谢:)

2 个答案:

答案 0 :(得分:0)

因此,您要做的是,首先从"-d1 *"变量中提取整个**argv字符串。为此,只需循环**argv并检查其前四个字符是否为"-d1 "。之后,将其复制到一个字符串,例如s,并删除s结尾处的所有空白区域。为此,请使用while循环。最后检查s中的最后5个字符是否为".deck"

(伪代码)

target="-d1 ";
loop i from 0 to argc-1{
    flag=true;
    loop j from 0 to 3{
        if (argv[i][j]!=target[j]){
            flag=false;
            break;
        }
    }
    if (flag){
        break;
    }
}
if (!flag){
    /* ERROR - NO "-d1" ARGUMENT */
}
str=copy(argv[i]);
len=length(str)-1;
while (len>0)&&(str[len]==' '){
    len--;
}
if (len<6){
    /* ERROR - THE STRING IS CERTAINLY INVALID */
}
flag=true;
target="kced."; /* reverse of ".deck" */
loop i from 0 to 4{
    if (str[len-i]!=target[i]){
         flag=false;
    }
}
if (!flag){
    /* ERROR - FILENAME IS INVALID */
}
/* proceed */

答案 1 :(得分:0)

这可能就是您想要的。

当前,以下程序在所有命令行参数上循环并搜索-d1标志。找到后,它会确保存在下一个参数,即在尝试打开它之前是扩展名为.deck的字符串。

请注意,该程序不会处理多个文件。 您将需要实现某种类型的链接列表或数组,以存储多个fds或字符串。

#include <stdio.h>
#include <string.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

static const char *FLAG = "-d1";
static const char *EXTENSION = ".deck";

int is_deck_file(char const *string)
{
    int length = strlen(string);

    if (length < 6)
        return 0;
    if (strcmp(string + (length - 5), EXTENSION) == 0)
        return 1;
    return 0;
}

int main(int argc, char const *argv[])
{
    int fd = -2;

    for (unsigned int i = 0; i < argc; i++) {
        if (strcmp(argv[i], FLAG) == 0) {
            if (i + 1 < argc && is_deck_file(argv[i + 1])) {
                i++;
                fd = open(argv[i], O_RDONLY);
            } else {
                dprintf(2, "Error: %s flag must be followed by a filepath.\n", FLAG);
            }
        }
    }
    if (fd == -2)
        dprintf(2, "No file was provided.\n");
    else if (fd == -1)
        dprintf(2, "Unable to open file.\n");
    else
        dprintf(1, "File provided, with right extension!\n");
}
相关问题