From 0d514a69cd22d34cb98e1a0582f5a702f9e7e30e Mon Sep 17 00:00:00 2001 From: hairrrrr <781728963@qq.com> Date: Fri, 8 May 2020 09:05:39 +0800 Subject: [PATCH] 5-8 --- .../02 检查文件是否可以打开/canopen.c | 25 +++++++++++++ .../02 检查文件是否可以打开/readme.md | 23 ++++++++++++ .../Examples/22 输入&输出/03 复制文件/fcopy.c | 34 +++++++++++++++++ .../22 输入&输出/03 复制文件/readme.md | 9 +++++ .../04 修改零件记录文件/invclear.c | 37 +++++++++++++++++++ .../04 修改零件记录文件/readme.md | 3 ++ 6 files changed, 131 insertions(+) create mode 100644 Coding/Examples/22 输入&输出/02 检查文件是否可以打开/canopen.c create mode 100644 Coding/Examples/22 输入&输出/02 检查文件是否可以打开/readme.md create mode 100644 Coding/Examples/22 输入&输出/03 复制文件/fcopy.c create mode 100644 Coding/Examples/22 输入&输出/03 复制文件/readme.md create mode 100644 Coding/Examples/22 输入&输出/04 修改零件记录文件/invclear.c create mode 100644 Coding/Examples/22 输入&输出/04 修改零件记录文件/readme.md diff --git a/Coding/Examples/22 输入&输出/02 检查文件是否可以打开/canopen.c b/Coding/Examples/22 输入&输出/02 检查文件是否可以打开/canopen.c new file mode 100644 index 0000000..482fcea --- /dev/null +++ b/Coding/Examples/22 输入&输出/02 检查文件是否可以打开/canopen.c @@ -0,0 +1,25 @@ +#define _CRT_SECURE_NO_WARNINGS 1 + +#include +#include + +int main(int argc, char* argv[]) { + + FILE* fp; + + if (argc != 2) { + printf("usage: canopen filename\n"); + exit(EXIT_FAILURE); + } + + if ((fp = fopen(argv[1], "r")) == NULL) { + printf("%s can't be opend.\n", argv[1]); + exit(EXIT_FAILURE); + } + + printf("%s can be opend.\n", argv[1]); + + fclose(fp); + + return 0; +} diff --git a/Coding/Examples/22 输入&输出/02 检查文件是否可以打开/readme.md b/Coding/Examples/22 输入&输出/02 检查文件是否可以打开/readme.md new file mode 100644 index 0000000..f287012 --- /dev/null +++ b/Coding/Examples/22 输入&输出/02 检查文件是否可以打开/readme.md @@ -0,0 +1,23 @@ +#### 程序:检查文件是否可以打开 + +下面程序判断文件是否存在,如果存在是否可以打开进行读入。在运行程序时,用户给出要检查的文件的名字: + +```c +canopen file +``` + +然后程序将显示 : + +``` +file can be opend. +或 +file can't be opend. +``` + +如果在命令行中录入的实际参数的数量不对,那么程序将显示出消息: + +``` +usage: canopen filename +``` + +来提示用户 canopen 需要一个文件名。 \ No newline at end of file diff --git a/Coding/Examples/22 输入&输出/03 复制文件/fcopy.c b/Coding/Examples/22 输入&输出/03 复制文件/fcopy.c new file mode 100644 index 0000000..74fdc89 --- /dev/null +++ b/Coding/Examples/22 输入&输出/03 复制文件/fcopy.c @@ -0,0 +1,34 @@ +#define _CRT_SECURE_NO_WARNINGS 1 + +#include +#include + +int main(int argc, char* argv[]) { + + FILE* src_fp, * dest_fp; + int ch; + + if (argc != 3) { + fprintf(stderr, "usage: fcopy source dest\n"); + exit(EXIT_FAILURE); + } + + if ((src_fp = fopen(argv[1], "rb")) == NULL) { + fprintf(stderr, "Can't open file %s\n", argv[1]); + exit(EXIT_FAILURE); + } + + if ((dest_fp = fopen(argv[2], "wb")) == NULL) { + fprintf(stderr, "Can't open file %s\n", argv[2]); + fclose(src_fp); + exit(EXIT_FAILURE); + } + + while ((ch = getc(src_fp)) != EOF) + putc(ch, dest_fp); + + fclose(src_fp); + fclose(dest_fp); + + return 0; +} \ No newline at end of file diff --git a/Coding/Examples/22 输入&输出/03 复制文件/readme.md b/Coding/Examples/22 输入&输出/03 复制文件/readme.md new file mode 100644 index 0000000..049a56d --- /dev/null +++ b/Coding/Examples/22 输入&输出/03 复制文件/readme.md @@ -0,0 +1,9 @@ +#### 程序:复制文件 + +下面的程序用来进行文件的复制操作。当程序执行时,在命令行上指定原始文件名和新文件名。例如,将文件 f1.c 复制给文件 f2.c,使用命令: + +```c +fcopy f1.c f2.c +``` + +如果命令行上的文件名不是两个,或者至少有一个文件无法打开,那么程序 fcopy 都将产出出错消息。 \ No newline at end of file diff --git a/Coding/Examples/22 输入&输出/04 修改零件记录文件/invclear.c b/Coding/Examples/22 输入&输出/04 修改零件记录文件/invclear.c new file mode 100644 index 0000000..36ab148 --- /dev/null +++ b/Coding/Examples/22 输入&输出/04 修改零件记录文件/invclear.c @@ -0,0 +1,37 @@ +#include +#include + +#define NAME_LEN 25 +#define MAX_PARTS 100 + +struct part { + int number; + char name[NAME_LEN + 1]; + int on_hand; +}inventory[MAX_PARTS]; + +int num_part; + +int main() { + + FILE* fp; + int i; + + if ((fp = fopen("inventory.dat", "rb+")) == NULL) { + fprintf(stderr, "Can't open inventory file.\n"); + exit(EXIT_FAILURE); + } + + num_part = fread(inventory, sizeof(struct part), MAX_PARTS, fp); + + for (i = 0; i < num_part; i++) + inventory[i].on_hand = 0; + + rewind(fp); + // rewind Ǻܹؼġڵ fread ֮ļλļĩβ rewind ͵ fwrite ô fwrite ļĩβݣḲǾݡ + fwrite(inventory, sizeof(struct part), num_part, fp); + + fclose(fp); + + return 0; +} diff --git a/Coding/Examples/22 输入&输出/04 修改零件记录文件/readme.md b/Coding/Examples/22 输入&输出/04 修改零件记录文件/readme.md new file mode 100644 index 0000000..213b1ef --- /dev/null +++ b/Coding/Examples/22 输入&输出/04 修改零件记录文件/readme.md @@ -0,0 +1,3 @@ +#### 程序:修改零件记录文件 + +下面这个程序打开包含 part 结构的二进制文件,把结构读到数组中,把每个结构的成员 on_hand 置为 0,然后再把此结构写回到文件中。注意,程序使用 `"rb+"`模式打开文件,因此既可以读又可以写。 \ No newline at end of file