20211105李宜时《信息安全系统设计与实现》第二周学习报告

发布时间 2023-09-17 14:00:49作者: 李宜时

#20211105李宜时《信息安全系统设计与实现》第二周学习报告

在本次的自学中,我学习了很多的有关二进制文件的事情,我通过了书本,gpt和一些网课的途径,根据云班课的自学要求进行实践。

文件操作的内容

  1. 文本文件操作:文本文件是以纯文本形式存储数据的文件。我学习了如何进行字符读写,行读写以及在文本文件中进行任意位置的读写操作。这些操作使我能够有效地处理文本数据。

  2. 二进制文件操作:二进制文件以字节的形式存储数据,没有像文本文件那样的字符编码。我了解了如何在C语言中进行二进制文件的读写操作,这对于处理非文本数据非常重要。

文件操作的方法

文件操作通常包括以下基本步骤:

  1. 打开文件:使用fopen()函数来打开文件,以便后续的读写操作。

  2. 读取数据:使用fread()fgets()等函数从文件中读取数据,具体的读取方法取决于文件类型(文本或二进制)以及读取的数据结构。

  3. 写入数据:使用fwrite()fprintf()等函数将数据写入文件。同样,写入的方式也取决于文件类型和数据结构。

  4. 关闭文件:使用fclose()函数关闭文件,确保资源被释放。

二进制文件和文本文件的转换

在C语言中,文件的类型由打开文件时使用的模式决定。要打开一个文本文件,可以使用模式"r"(读取)或"w"(写入),而要打开一个二进制文件,可以使用模式"rb"(二进制读取)或"wb"(二进制写入)。这样,我可以在需要的时候轻松地在文本和二进制文件之间进行转换。

数据结构的读写

在文件操作中,数据结构的读写是一个关键问题。对于文本文件,我可以使用fprintf()fscanf()等函数来读写结构化数据,通常使用格式化字符串指定数据的格式。而对于二进制文件,我可以使用fwrite()fread()函数来直接读写结构体,确保数据以二进制形式被存储和读取。

通过学习这些内容,我对C语言中的文件操作有了更深入的理解,并且可以更灵活地处理不同类型的文件和数据结构。这对于开发各种类型的应用程序都非常有用。

我还通过gpt了解到了一些高级的文件操作技巧和注意事项

高级文件操作技巧

  1. 文件指针的移动:在文件操作中,我学会了使用fseek()函数来移动文件指针的位置。这允许我在文件中定位到特定的位置,以便执行插入、删除或修改操作。

  2. 文件打开模式:除了常见的读取和写入模式,我还学习了其他文件打开模式,如追加模式("a""ab"),用于在文件末尾添加数据而不覆盖现有内容。

  3. 文件错误处理:我了解到需要检查文件操作是否成功,特别是在打开文件和读写文件时。通过检查函数的返回值,我可以及时处理任何可能的错误情况。

文件操作的注意事项

  1. 内存管理:在处理大型文件时,我需要注意内存的管理,以免出现内存不足的问题。可以使用逐块读写的方式来处理大文件,而不是一次性将整个文件加载到内存中。

  2. 文件关闭:忘记关闭文件可能导致资源泄漏。为了确保文件在使用后被正确关闭,我可以使用fclose()函数,或者在程序结束时自动关闭文件。

  3. 跨平台兼容性:要确保文件操作在不同操作系统上都能正常工作,我可以使用标准的C库函数,并小心处理文本文件中的换行符问题(不同操作系统使用不同的换行符)。

总的来说,通过学习这些高级文件操作技巧和注意事项,我现在能够更安全、更有效地处理文件,并且更好地理解了如何在C语言中进行文件操作。这些技能在软件开发中是非常有用。

其中我进行了代码的实践,以下是一部分代码,我在其中与舍友进行请教讨论,获得了很多的启发

#include <stdio.h>

int main() {
    FILE* file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件!\n");
        return 1; // 返回错误代码
    }
    
    char buffer[100]; // 用于存储读取的行
    
    if (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("读取的内容:%s", buffer);
    } else {
        printf("读取失败或到达文件末尾!\n");
    }
    
    fclose(file); // 关闭文件
    
    return 0;
}
*/filecopy*/
#include <stdio.h>
FILE *fp,*gp;
int main()
{
int m;
fp=fopen("source.txt","r");
gp=fopen("target.txt","w");
while ((m=gtec(fp))!= EOF)
putc(m,gp);
fclose(fp);
fclose(gp);
}
#include <stdio.h>

int main() {
    FILE* file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件!\n");
        return 1;
    }
    
    int num1, num2;
    char str[100];
    
    // 从文件中读取格式化输入
    int numItems = fscanf(file, "%d %d %s", &num1, &num2, str);
    
    if (numItems == 3) {
        printf("成功读取:%d %d %s\n", num1, num2, str);
    } else {
        printf("读取失败\n");
    }
    
    fclose(file);
    
    return 0;
}
#include <stdio.h>

int main() {
    FILE* file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件!\n");
        return 1;
    }
    
    // 获取当前文件位置指针的偏移量
    long int offset = ftell(file);
    printf("当前偏移量:%ld\n", offset);
    
    fclose(file);
    
    return 0;
}

以下是我的苏格拉底讨论