当前位置: 首页 > news >正文

C语言编程笔记:文件处理的艺术

大家好,这里是小编的博客频道
小编的博客:就爱学编程

很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!!

本文目录

  • 引言
  • 正文
    • 一、为什么要用文件
    • 二、文件的分类
    • 三、文件指针
    • 四、文件的打开与关闭
      • 1. 文件的打开
      • 2. 文件的关闭
    • 五、文件缓冲区
    • 六、文件的基本操作
      • (1)打开文件
      • (2)关闭文件
      • (3)检测文件末尾和错误
      • (4)清除文件错误标志
    • 七、顺序读写文件
      • (1)字符级操作函数
        • fgetc()
        • fputc()
      • (2)字符串级操作函数
        • fgets()
        • fputs()
      • (3)格式化输入输出函数
        • fprintf()
        • fscanf()
    • 八、随机读写文件
        • (1)文件指针与定位函数
        • 示例代码
          • 示例1:基本随机读写
          • 示例2:使用`ftell`获取当前位置
          • 示例3:二进制文件的随机读写
    • 九、读取错误检查
        • (1)错误检查函数
        • (2)错误处理策略
        • (3)示例代码
          • 示例1:使用`ferror`检查读取错误
          • 示例2:使用`feof`检查文件末尾
    • 十、总结
  • 快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!

引言

在C语言编程中,文件操作是数据处理的重要部分。通过文件,我们可以实现数据的持久化存储和共享。下面重点通过多个例子讲清文件的打开和关闭这两个函数。那现在宝子们就跟着小编的步伐一起进入本章知识的学习。Go!Go!Go!

在这里插入图片描述


那接下来就让我们开始遨游在知识的海洋!

正文


一、为什么要用文件

这是因为:

  • 在程序执行过程中,有时需要将数据保存下来供以后使用,或者从外部获取数据进行处理。这时,我们就需要使用到文件。文件是一种用于存储数据的媒介,它可以是磁盘上的物理文件,也可以是内存中的虚拟文件。通过使用文件,我们可以方便地实现数据的长期保存和跨程序的数据共享

二、文件的分类

在C语言中,文件通常按照其内容和用途进行分类,主要包括文本文件二进制文件两种类型:

  1. 文本文件以ASCII码或Unicode码形式存储的文件,主要用于存储人类可读的字符信息,如源代码、文档等。
  1. 二进制文件以二进制形式存储的文件,主要用于存储机器可直接读取和处理的数据,如图像、音频、视频等多媒体文件。

三、文件指针

在C语言中,文件操作是通过文件指针来实现的。 文件指针是一个指向FILE结构体的指针,该结构体包含了文件的各种信息,如文件名、文件位置指示器、文件结束标志等。通过文件指针,我们可以对文件进行各种操作,如读写、定位等。


四、文件的打开与关闭

1. 文件的打开

在C语言中,打开文件需要使用fopen()函数。该函数原型如下:

FILE *fopen(const char *filename, const char *mode);

其中,filename参数是要打开的文件名(包括路径),mode参数指定了文件的打开模式。常见的打开模式有:

  • "r":只读模式。如果文件不存在,则打开失败;如果文件存在,则只能从中读取数据。
  • "w":写模式。如果文件不存在,则以指定的文件名创建新文件;如果文件已存在,则删除原有内容,从头开始写入新数据。
  • "a":追加模式。如果文件不存在,则以指定的文件名创建新文件;如果文件已存在,则在文件末尾追加新数据。
  • "rb""wb""ab":分别表示以二进制方式打开文件,进行读、写、追加操作。

以下是一些使用fopen()函数打开文件的示例:

示例1:以只读模式打开文本文件

#include <stdio.h>int main() {FILE *fp;fp = fopen("text.txt", "r"); // 打开名为"text.txt"的文本文件,以只读模式if (fp == NULL) {printf("无法打开文件
");return 1;} else {printf("文件成功打开
");// 在此处可以进行文件读取等操作fclose(fp); // 关闭文件}return 0;
}

示例2:以写模式打开文件

#include <stdio.h>int main() {FILE *fp;fp = fopen("output.txt", "w"); // 打开名为"output.txt"的文件,以写模式if (fp == NULL) {printf("无法打开文件
");return 1;} else {fprintf(fp, "Hello, World!
"); // 向文件中写入字符串fclose(fp); // 关闭文件}return 0;
}

示例3:以追加模式打开文件

#include <stdio.h>int main() {FILE *fp;fp = fopen("append.txt", "a"); // 打开名为"append.txt"的文件,以追加模式if (fp == NULL) {printf("无法打开文件
");return 1;} else {fprintf(fp, "This is a new line.
"); // 向文件末尾追加字符串fclose(fp); // 关闭文件}return 0;
}

示例4:以二进制方式打开文件

#include <stdio.h>int main() {FILE *fp;fp = fopen("binaryfile.bin", "rb"); // 打开名为"binaryfile.bin"的文件,以二进制方式读取if (fp == NULL) {printf("无法打开文件
");return 1;} else {// 在此处可以进行二进制文件的读取等操作fclose(fp); // 关闭文件}return 0;
}

2. 文件的关闭

在完成文件操作后,我们需要使用fclose()函数来关闭文件。该函数原型如下:

int fclose(FILE *stream);

其中,stream参数是一个指向要关闭的文件的指针。fclose()函数会关闭文件,并释放与该文件相关的资源。如果关闭文件时发生错误,则返回非零值(通常为EOF);否则返回0。

以下是一个使用fclose()函数关闭文件的示例:

示例5:关闭文件

#include <stdio.h>int main() {FILE *fp;fp = fopen("example.txt", "r"); // 打开一个文件if (fp != NULL) {// 在此处可以进行文件读取等操作if (fclose(fp) != 0) { // 关闭文件,并检查是否成功perror("Error closing file"); // 如果关闭失败,打印错误信息}} else {printf("无法打开文件
");}return 0;
}

需要注意的是:

  • 在使用完文件后一定要及时关闭它,以避免资源泄露和潜在的文件损坏问题。同时,如果在打开文件时使用了fopen()函数并且成功打开了文件,那么在关闭文件时一定要确保传递给fclose()函数的指针是与fopen()返回的指针相同的。

五、文件缓冲区

为了提高文件操作的效率,C语言引入了文件缓冲区的概念。当向文件写入数据时,数据首先被写入到缓冲区中,而不是直接写入到磁盘上。只有当缓冲区满或者显式地调用刷新函数(如fflush())时,缓冲区中的数据才会被写入到磁盘上。同样地,当从文件读取数据时,也是先从磁盘上将数据读取到缓冲区中,然后再从缓冲区中读取数据给程序使用。

这种缓冲区机制可以减少磁盘I/O操作的次数,从而提高文件操作的效率。但是,在某些情况下(如需要立即将数据写入磁盘以确保数据安全时),我们可能需要手动刷新缓冲区或者使用无缓冲的文件操作方式。

综上所述:

  • C语言的文件操作涉及多个方面,包括文件的打开与关闭、读写操作、文件指针的使用以及文件缓冲区的处理等。通过掌握这些基础知识,我们可以更加高效地进行文件操作和数据处理工作。

六、文件的基本操作

(1)打开文件

使用fopen函数可以打开一个文件。函数的原型如下:

FILE *fopen(const char *filename, const char *mode);

其中,filename是文件名(包含路径),mode是文件的打开模式(如读、写等)。

常见的模式有:

"r" : 只读方式打开文件,该文件必须存在。

"w" : 写入方式打开文件,若文件存在则长度被截为0,即该文件内容会消失;若文件不存在则创建新文件。

"a" : 以附加的方式打开文件,写入的数据会被添加到文件尾,即使使用了 fseek 之类的函数也不会改变。

"r+" : 可读写的方式打开文件,该文件必须存在。

"w+" : 可读写方式打开文件,若文件存在则文件长度被截为0,即该文件内容会消失;若文件不存在则创建新文件。

"a+" : 以可读写的方式打开文件,写入的数据会被添加到文件尾。

(2)关闭文件

使用 fclose 函数可以关闭一个已打开的文件。函数的原型如下:

int fclose(FILE *stream);

(3)检测文件末尾和错误

feof(FILE *stream): 检测是否到达文件末尾

ferror(FILE *stream): 检测是否发生读写错误

(4)清除文件错误标志

使用 clearerr 函数可以清除文件错误标志和文件结束标志。函数的原型如下:

void clearerr(FILE *stream);


顺序读写是指按照文件中数据的存储顺序依次进行读写操作

七、顺序读写文件

在C语言中,文件的顺序读写涉及多个函数,这些函数允许我们按照文件中的存储顺序来读取或写入数据。以下是顺序读写相关的函数详细介绍及代码示例:

(1)字符级操作函数

fgetc()

功能:

  • 从指定的文件流中读取下一个字符(一个无符号字符),并将其作为int类型的值返回。如果到达文件末尾(EOF)或发生错误,则返回EOF

原型: int fgetc(FILE *stream);

示例:

#include <stdio.h>
int main() {FILE *pf = fopen("text.txt", "r"); // 打开已经创建好的文件if (pf == NULL) {perror("fopen");return 1;}// 读文件int ret = fgetc(pf);printf("%c", ret);
ret = fgetc(pf);
printf("%c
", ret);
ret = fgetc(pf);
printf("%c
", ret);
// 关闭文件
fclose(pf);
pf = NULL;
return 0;
}

fputc()

功能:

  • 将一个字符写入到指定的文件流中。

原型:int fputc(int character, FILE *stream);

示例:

#include <stdio.h>
int main() {FILE *pf = fopen("text.txt", "w"); // 以写模式打开文件if (pf == NULL) {perror("fopen");return 1;}// 写文件fputc('a', pf);fputc('b', pf);fputc('c', pf);// 关闭文件fclose(pf);pf = NULL;return 0;
}

(2)字符串级操作函数

fgets()

功能:

  • 从指定的文件流中读取一行文本(包括换行符,如果有的话,但最多读取到数组大小减一的位置),并将其存储在字符串中。如果成功,它会返回一个指向该字符串的指针;如果发生错误或到达文件末尾(EOF)而没有读取任何字符,则返回NULL

原型: char *fgets(char *string, int n, FILE *stream);

示例:

#include <stdio.h>
int main() {char arr[10] = {0};FILE *pf = fopen("text.txt", "r"); // 以读模式打开文件if (pf == NULL) {perror("fopen");return 1;}// 读文件fgets(arr, sizeof(arr), pf);printf("%s", arr);
// 关闭文件
fclose(pf);
pf = NULL;
return 0;
}

fputs()

功能:

  • 将字符串写入到指定的文件流中,但不包括空字符’\0’。如果成功,它返回非负值;如果发生错误,则返回EOF。

原型: int fputs(const char *string, FILE *stream);

示例:

#include <stdio.h>
int main() {FILE *pf = fopen("text.txt", "w"); // 以写模式打开文件if (pf == NULL) {perror("fopen");return 1;}// 写文件fputs("Hello, World!", pf);
// 关闭文件
fclose(pf);
pf = NULL;
return 0;
}

(3)格式化输入输出函数

fprintf()

功能:

  • 向指定的输出流(如文件)写入格式化的数据。

原型: int fprintf(FILE *stream, const char *format[, argument]...);

示例:

#include <stdio.h>
struct S {char arr[10];int num;float sc;
};
int main() {struct S s = {"abcde", 10, 5.5f};FILE *pf = fopen("text.txt", "w"); // 以写模式打开文件if (pf == NULL) {perror("fopen");return 1;}// 写文件fprintf(pf, "%s %d %f", s.arr, s.num, s.sc);// 关闭文件fclose(pf);pf = NULL;return 0;
}
fscanf()

功能:

  • 从指定的输入流(如文件)中按照指定格式读取数据。

原型: int fscanf(FILE *stream, const char *format[, argument]...);

示例:

#include <stdio.h>
struct S {char arr[10];int num;float sc;
};
int main() {struct S s = {0};FILE *pf = fopen("text.txt", "r"); // 以读模式打开文件if (pf == NULL) {perror("fopen");return 1;}// 读文件fscanf(pf, "%s %d %f", s.arr, &(s.num), &(s.sc));// 打印printf("%s %d %f", s.arr, s.num, s.sc);
// 关闭文件
fclose(pf);
pf = NULL;
return 0;
}

在C语言中,文件的随机读写是指能够在文件的任意位置进行读取或写入数据,而不仅仅是顺序地从头到尾处理文件。这种能力在处理大型数据文件时尤为重要,因为它允许程序高效地访问和修改文件中的特定部分。

八、随机读写文件

(1)文件指针与定位函数

要实现文件的随机读写,首先需要了解几个关键概念:

  1. 文件指针:用于标识打开的文件及其在存储设备上的当前位置。

  2. 定位函数:如fseek()ftell()rewind()等,用于移动文件指针到指定位置或获取当前位置。

  • fseek(FILE *stream, long offset, int whence):将文件指针移动到相对于某个位置的偏移量处。
  • whence可以是SEEK_SET(文件开头)、SEEK_CUR(当前位置)或SEEK_END(文件末尾)。
  • ftell(FILE *stream):返回当前文件指针的位置(相对于文件开头的字节数)。
  • rewind(FILE *stream):将文件指针重新定位到文件的开头。
示例代码

以下是一些具体的例子,展示了如何在C语言中进行文件的随机读写操作。

示例1:基本随机读写
#include <stdio.h>
#include <stdlib.h>int main() {FILE *file = fopen("example.txt", "w+");if (!file) {perror("Failed to open file");return EXIT_FAILURE;}// 写入一些初始数据fprintf(file, "Hello, World!
This is a test.
");// 移动到文件的第7个字节处(索引从0开始)fseek(file, 6, SEEK_SET);// 在此处写入新字符fputc('C', file);// 重置文件指针到文件开头rewind(file);// 读取并打印文件内容char buffer[100];while (fgets(buffer, sizeof(buffer), file)) {printf("%s", buffer);}fclose(file);return EXIT_SUCCESS;
}

在这个例子中,我们打开了一个名为example.txt的文件,写入了初始数据,然后将文件指针移动到第7个字节处(即'H''e'之间),并将该位置的字符替换为'C'。最后,重置文件指针并打印整个文件的内容。

示例2:使用ftell获取当前位置
#include <stdio.h>
#include <stdlib.h>int main() {FILE *file = fopen("numbers.txt", "w+");if (!file) {perror("Failed to open file");return EXIT_FAILURE;}// 写入一系列数字for (int i = 0; i < 10; ++i) {fprintf(file, "%d
", i);}// 移动到文件的第5行(实际上是第4个换行符之后)fseek(file, 4 * (sizeof(int) + 1), SEEK_SET); // 假设每个数字和换行符占用固定大小的空间// 获取当前文件指针位置long position = ftell(file);printf("Current file pointer position: %ld
", position);// 从当前位置继续写入fprintf(file, "Inserted Number
");// 重置文件指针并打印文件内容rewind(file);char buffer[100];while (fgets(buffer, sizeof(buffer), file)) {printf("%s", buffer);}fclose(file);return EXIT_SUCCESS;
}

这个例子中,我们创建了一个包含数字的文件,然后尝试在第5行的位置插入一个新字符串。注意,这里对文件指针的移动是基于假设的固定大小的数字和换行符,实际应用中可能需要更精确的计算或使用其他方法来确定正确的偏移量。

示例3:二进制文件的随机读写
#include <stdio.h>
#include <stdlib.h>typedef struct {int id;float value;
} Record;int main() {FILE *file = fopen("records.bin", "wb+");if (!file) {perror("Failed to open file");return EXIT_FAILURE;}// 写入一些记录Record records[] = {{1, 1.1}, {2, 2.2}, {3, 3.3}};fwrite(records, sizeof(Record), 3, file);// 移动到第二条记录的位置(索引从0开始)fseek(file, sizeof(Record), SEEK_SET);// 读取并修改第二条记录Record temp;fread(&temp, sizeof(Record), 1, file);temp.value += 10.0;// 将修改后的记录写回原位置(覆盖旧记录)fseek(file, -sizeof(Record), SEEK_CUR); // 或者直接使用之前的ftell结果fwrite(&temp, sizeof(Record), 1, file);// 重置文件指针并验证内容(这里仅为了演示,实际应关闭文件后重新打开读取)rewind(file);Record readRecords[3];fread(readRecords, sizeof(Record), 3, file);for (int i = 0; i < 3; ++i) {printf("ID: %d, Value: %.2f
", readRecords[i].id, readRecords[i].value);}fclose(file);return EXIT_SUCCESS;
}
  • 在这个例子中,我们处理一个二进制文件,其中存储了结构体数组。我们展示了如何移动到特定的记录位置,读取它,进行修改,然后再将其写回到文件中。注意,由于我们在同一文件流中进行了读取和写入操作而没有关闭再重新打开文件,这里的验证步骤在实际应用中可能不准确;通常,你应该在修改完文件后关闭它,并在需要时以只读模式重新打开它以验证更改。

在C语言中,对文件进行读写操作时,进行错误检查是至关重要的。这不仅可以确保数据的完整性,还能提高程序的健壮性和可靠性。本文将详细介绍C语言文件操作中如何进行读取错误检查,并通过多个例子加以说明。

九、读取错误检查

(1)错误检查函数

C语言提供了几个函数来检查文件操作的错误状态:

  1. ferror:用于检查文件流上的最后一个I/O操作是否出错。其原型为int ferror(FILE *stream);。如果返回非零值,则表示发生了错误。
  1. perror:用于打印描述最近一次错误的字符串。其原型为void perror(const char *s);。其中,s是一个用户提供的错误信息前缀,通常用于指示发生错误的上下文。
  1. feof:用于检查是否已经到达文件末尾。其原型为int feof(FILE *stream);。如果返回非零值,则表示已经到达文件末尾。
(2)错误处理策略

在进行文件操作时,应该遵循以下错误处理策略:

  1. 在每次调用文件操作函数后,立即检查其返回值或错误状态。
  1. 如果发现错误,根据具体情况采取适当的措施,如打印错误信息、清理资源并退出程序等。
  1. 使用clearerr函数清除文件流的错误标志和文件结束标志,以便进行下一轮的文件操作。
(3)示例代码

以下是几个使用上述函数进行文件读取错误检查的示例代码:

示例1:使用ferror检查读取错误
#include <stdio.h>int main() {FILE *fp = fopen("sample.txt", "r");if (fp == NULL) {perror("Failed to open file");return 1;}char buffer[100];size_t bytesRead = fread(buffer, sizeof(char), sizeof(buffer) - 1, fp);if (ferror(fp)) {perror("Error reading file");fclose(fp);return 1;}// 确保缓冲区以null字符结尾buffer[bytesRead] = '\0';printf("Read from file: %s
", buffer);fclose(fp);return 0;
}

在这个例子中,我们尝试从一个名为sample.txt的文件中读取数据。如果在读取过程中发生错误,我们使用ferror函数进行检查,并使用perror函数打印错误信息。

示例2:使用feof检查文件末尾
#include <stdio.h>int main() {FILE *fp = fopen("numbers.txt", "r");if (fp == NULL) {perror("Failed to open file");return 1;}int number;while (!feof(fp)) {if (fscanf(fp, "%d", &number) != 1) {// 检查是否是因为到达文件末尾而失败if (!feof(fp) && ferror(fp)) {perror("Error reading number from file");fclose(fp);return 1;}// 如果是文件末尾,则跳出循环break;}printf("Read number: %d
", number);}fclose(fp);return 0;
}

在这个例子中,我们尝试从一个名为numbers.txt的文件中读取整数。我们使用feof函数来检查是否已经到达文件末尾,同时使用ferror函数来检查是否发生了其他读取错误。


十、总结

顺序读写按照文件中数据的存储顺序依次进行读写操作,常用函数有 fprintf , fscanf , fgets , fputs等。

随机读写可以在文件中的任意位置进行读写操作,常用函数有fseek , ftell , rewind

错误检查在进行文件操作时,应始终检查返回值并使用 feof ferror 来检测是否到达文件末尾或发生错误。


快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!

相关文章:

C语言编程笔记:文件处理的艺术

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一、为什么要用文件二、文件的分…...

[创业之路-255]:《华为数字化转型之道》-1-主要章节、核心内容、核心思想

目录 前言&#xff1a;数字化转型对于企业而言&#xff0c;是一种全方位的变革 一、主要章节 1、认知篇&#xff08;第1~2章&#xff09;- Why 2、方法篇&#xff08;第3~5章&#xff09;- How 3、实践篇&#xff08;第6~10章&#xff09;- 实践 4、平台篇&#xff08;第…...

《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a; 问&#xff1a;《汽车维修技师》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《汽车维修技师》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;北方联合出版传媒&#xff08;…...

2024 京东零售技术年度总结

每一次回望&#xff0c;都为了更好地前行。 2024 年&#xff0c;京东零售技术在全面助力业务发展的同时&#xff0c;在大模型应用、智能供应链、端技术、XR 体验等多个方向深入探索。京东 APP 完成阶段性重要改版&#xff0c;打造“又好又便宜”的优质体验&#xff1b;国补专区…...

PyTorch使用教程(8)-一文了解torchvision

一、什么是torchvision torchvision提供了丰富的功能&#xff0c;主要包括数据集、模型、转换工具和实用方法四大模块。数据集模块内置了多种广泛使用的图像和视频数据集&#xff0c;如ImageNet、CIFAR-10、MNIST等&#xff0c;方便开发者进行训练和评估。模型模块封装了大量经…...

如何在不暴露MinIO地址的情况下,用Spring Boot与KKFileView实现文件预览

在现代Web应用中&#xff0c;文件预览是一项常见且重要的功能。它允许用户在不上传或下载文件的情况下&#xff0c;直接在浏览器中查看文件内容。然而&#xff0c;直接将文件存储服务&#xff08;如MinIO&#xff09;暴露给前端可能会带来安全风险。本文将介绍如何在不暴露MinI…...

ICMP协议和ICMP重定向攻击

✍作者&#xff1a;柒烨带你飞 &#x1f4aa;格言&#xff1a;生活的情况越艰难&#xff0c;我越感到自己更坚强&#xff1b;我这个人走得很慢&#xff0c;但我从不后退。 &#x1f4dc;系列专栏&#xff1a;网络安全从菜鸟到飞鸟的逆袭 目录 一&#xff0c;ICMP基本概念二&…...

leetcode203-移除链表元素

leetcode203 什么是链表 之前不懂链表的数据结构&#xff0c;一看到链表的题目就看不明白 链表是通过next指针来将每个节点连接起来的&#xff0c;题目中给的链表是单向链表&#xff0c;有两个值&#xff0c;一个val表示值&#xff0c;一个next&#xff1a;表示连接的下一个…...

Rust 中构建 RESTful API

在 Rust 中构建 RESTful API&#xff0c;你可以选择几个不同的框架。每个框架有不同的特点、优缺点和适用场景&#xff0c;下面我将介绍几个常用的 Rust Web 框架&#xff0c;并分析它们的优缺点。 Actix Web 简介&#xff1a; Actix Web 是一个非常高性能的 Web 框架&#xf…...

Sqlmap入门

原理 在owasp发布的top10 漏洞里面&#xff0c;注入漏洞一直是危害排名第一&#xff0c;其中数据库注入漏洞是危害的。 当攻击者发送的sql语句被sql解释器执行&#xff0c;通过执行这些恶意语句欺骗数据库执行&#xff0c;导致数据库信息泄漏 分类 按注入类型 常见的sql注入…...

迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?

【图片来源于网络&#xff0c;侵删】 这是2024年初Figure公司展示的人形机器人Figure 01&#xff0c;他可以通过观看人类的示范视频&#xff0c;在10小时内经过训练学会煮咖啡&#xff0c;并且这个过程是完全自主没有人为干涉的&#xff01; 【图片来源于网络&#xff0c;侵删】…...

移动端 REM 适配

移动端 REM 适配 Vant 中的样式默认使用 px 作为单位&#xff0c;如果需要使用 rem 单位&#xff0c;推荐使用以下两个工具&#xff1a; postcss-pxtorem 是一款 postcss 插件&#xff0c;用于将单位转化为 remlib-flexible 用于设置 rem 基准值 下面我们分别将这两个工具配…...

逐笔成交逐笔委托Level2高频数据下载和分析:20241230

逐笔委托逐笔成交下载 链接: https://pan.baidu.com/s/11Tdq06bbYX4ID9dEaiv_lQ?pwdcge6 提取码: cge6 Level2逐笔成交逐笔委托数据分享下载 利用Level2的逐笔交易和委托数据&#xff0c;这种以毫秒为单位的详细信息能揭露众多关键信息&#xff0c;如庄家意图、伪装行为&…...

C#实现字符串反转的4种方法

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... 1、string.Reverse 方法 string content "Hello World";string reverseStri…...

UDP 单播、多播、广播:原理、实践

一、引言 在计算机网络通信领域&#xff0c;UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一种重要的传输层协议。它以无连接、低开销的特点&#xff0c;在众多实时性要求高的应用场景中发挥关键作用。UDP 支持单播、多播和广播三种通信模式…...

深入浅出:Go语言中的bytes包与字节串操作详解

标题:深入浅出:Go语言中的bytes包与字节串操作详解 引言 在Go语言的世界里,bytes包是一个非常重要的标准库,它为开发者提供了高效处理字节切片(byte slice)的功能。无论是处理二进制数据、UTF-8编码的字符串,还是进行高效的数据读写操作,bytes包都扮演着不可或缺的角色…...

数据库存储上下标符号,sqlserver 2008r2,dm8

sqlserver 2008r2&#xff1a; 数据类型需要用nvarchar插入数据时字符串前需要用N create table test( col1 varchar(50), col2 nvarchar(50) ) insert into test(col1,col2) values(U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀,U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀) insert into…...

LabVIEW串口通信调试与数据接收问题

在使用LabVIEW进行串口通信时&#xff0c;常常会遇到无法接收数据的情况。这可能与串口设置、连接、设备响应等多方面因素相关。本文将详细讨论如何使用LabVIEW进行串口通信&#xff0c;并提供常见问题的排查与解决方法&#xff0c;帮助用户更高效地进行数据接收调试。通过调整…...

oneplus3t-lineage-14编译-android7

lineageOS-14(android7)的开发者模式/usb调试(adb)有root功能, 而lineageOS-16(android9)无 oneplus3t-lineage-14编译-android7 1 清华linageos镜像 x lineage-14.1-20180223-nightly-oneplus3-signed.zip ntfs分区挂载为普通用户目录 , ext4分区挂载为普通用户目录 bfs…...

存储过程(SQL)

1.存储过程 存储过程&#xff08;Stored Procedure&#xff09;是一组为了完成特定功能的SQL语句集&#xff0c;经编译后存储在数据库中&#xff0c;用户通过指定存储过程的名字并给定参数&#xff08;如果该存储过程带有参数&#xff09;来调用执行它。 2.MySQL存储过程创建…...

【I/O编程】UNIX文件基础

IO编程的本质是通过 API 操作 文件。 什么是 IO I - Input 输入O - Output 输出 这里的输入和输出都是站在应用&#xff08;运行中的程序&#xff09;的角度。外部特指文件。 这里的文件是泛指&#xff0c;并不是只表示存在存盘中的常规文件。还有设备、套接字、管道、链接…...

完美解决phpstudy安装后mysql无法启动

phpstudy数据库无法启动有以下几个原因。 **一、**自己在电脑上安装了MySQL数据库,MySQL的服务名为MySQL,这会与phpstudy的数据库的服务名发生冲突&#xff0c;从而造成phpstudy中的数据库无法启动&#xff0c;这时我们只需要将自己安装的MySQL的服务名改掉就行。 但是&#…...

自己造轮子-基于Ceres的GNSS-INS松耦合组合导航算法

之前硕士期间的研究课题涉及到GNSS-INS组合导航&#xff0c;入门看的武汉大学牛老师团队的KF-GINS&#xff0c;不得不说&#xff0c;大组的东西还是很棒的&#xff0c;很适合组合导航入门&#xff0c;KF-GINS主要是基于ESKF的GNSS/INS松耦合组合导航系统&#xff0c;博主就不在…...

「实战应用」如何为DHTMLX JavaScript 甘特图添加进度线

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 今天&#xff0c;您将学习如何使用进度线补充JavaScript 甘特图&#xff0c;以便于监控项目进度。 DHTMLX Gantt 最新试用版下载 …...

MySQL面试题2025 每日20道

1、MySQL 中的数据排序是怎么实现的&#xff1f; 简单 在 MySQL 中&#xff0c;数据排序是通过 ORDER BY 子句来实现的。当你执行一个查询语句时&#xff0c;可以在 SELECT 语句的末尾添加 ORDER BY 来指定按照哪个列进行排序&#xff0c;以及升序&#xff08;ASC&#xff09;…...

HTML学习笔记(4)

目录 一、背景相关样式 二、定位position 三、javascript 1、变量的定义 2、数据类型 3、绑定事件 一、背景相关样式 background-image: url(); // 背景图片 background-repeat: repeat; // 背景图片是否平铺 no-repeat background-size: 200px; // 背景图片尺寸 cover把…...

解决 MySQL 服务无法启动:failed to restart mysql.service unit not found

目录 前言1. 问题描述2. 问题分析3. 解决步骤 3.1 检查 MySQL 服务文件3.2 备份旧的服务文件3.3 启动 MySQL 服务3.4 验证服务状态 4. 总结结语 前言 在日常使用 MySQL 数据库时&#xff0c;有时候可能会遇到服务无法正常启动的问题。这类问题通常出现在系统更新或者服务配置…...

在 Ubuntu 上安装 Nginx 的详细指南

在Ubuntu系统中从源码安装Nginx可以让您自定义Nginx的编译选项和模块&#xff0c;以满足特定需求。以下是详细的步骤指南&#xff1a; 前提条件 更新系统包列表 sudo apt update sudo apt upgrade -y安装必要的依赖包 sudo apt install -y build-essential libpcre3 libpcre3-…...

58,【8】BUUCTF [PwnThyBytes 2019]Baby_SQL1

进入靶场 和2次注入的页面很像 不过养成查看源代码的好习惯 先访问source.zip 下载后解压&#xff0c;发现两个文件 第一个文件夹打开又有4个PHP文件 那还是先看index.php文件好了 有PHP和HTML两部分&#xff0c;下面是PHP部分代码&#xff08;HTML太长了&#xff0c;先放一…...

2.1 三个世界”与“图灵测试”:人工智能与人类智能的深度探索

“三个世界”与“图灵测试”:人工智能与人类智能的深度探索 人工智能的研究和发展,尤其是对其认知能力和智能表现的探索,早在20世纪中期就已成为科学家的热议话题。随着技术的进步,学者们提出了许多思想框架来理解人工智能的运作及其与人类智能的关系。其中,“三个世界”…...

搜索引擎如何找到网站/推广app佣金平台正规

首先定位到adb所在的目录 将手机连接上电脑。 在命令行运行&#xff1a; adb devices 这个命令可以列出所有连上的移动设备。 在命令行运行&#xff1a; adb logcat 可以显示日志。 以下是例子截图&#xff1a; 当然logcat有更高级的过滤等命令&#xff0c;下一篇文章总结。…...

做查询网站有哪些/seo网站系统

1. 题目 原题链接 给你两个有序整数数组 nums1 和 nums2&#xff0c;请你将 nums2 合并到 nums1 中&#xff0c;使 nums1 成为一个有序数组。 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m n&#xff0c;这样它就有足够的空间保存来…...

模块化建站工具/优化大师班级优化大师

IDEA同一个项目中,有时候会用到 GIT 有时候 也会用到 SVN 在IDEA中,没有按钮可以直接切换的,所以可以直接修改 .IDEA 文件夹中的XML配置文件, 不需要重启喔,直接在IDEA中就可以切换了 如图,把GIT的语句注释掉就可以了,因为如果下次还要用的话,就方便了转载于:https://www.cnb…...

wordpress用户名/短视频推广引流

考研调剂是考生们考得不太好&#xff0c;但已过线而采取的申请读研的途径!因此&#xff0c;需要及早关注考研调剂信息&#xff0c;主动与招生院校联系&#xff0c;确定调剂名额后准备考研复试。下面&#xff0c;北京文都考研网为大家整理出“2020考研调剂信息:西南石油大学石油…...

网站建设 付款方式/已备案域名交易平台

一. 数字测试 格式&#xff1a;n1 -op n2 测试操作op: eq/ne/le/ge/lt/gt --> 等于/不等于/小于等于/大于等于/小于/大于 1. 数字比较可以使用特殊的(())操作符&#xff0c;用法更接近于C语言&#xff0c;见数字测试。 二. 字符串测试 s1 s2    #s1与s2是否相同…...

怎么用优盘做网站登录密钥/关键词优化推广公司

pycharm添加conda解释器异常解决参考文章&#xff1a; &#xff08;1&#xff09;pycharm添加conda解释器异常解决 &#xff08;2&#xff09;https://www.cnblogs.com/xiaochina/p/12219865.html 备忘一下。...