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语言中,文件通常按照其内容和用途进行分类,主要包括文本文件和二进制文件两种类型:
- 文本文件:
以ASCII码或Unicode码形式存储的文件,主要用于存储人类可读的字符信息,如源代码、文档等。
- 二进制文件:
以二进制形式存储的文件,主要用于存储机器可直接读取和处理的数据,如图像、音频、视频等多媒体文件。
三、文件指针
在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)文件指针与定位函数
要实现文件的随机读写,首先需要了解几个关键概念:
-
文件指针:用于标识打开的文件及其在存储设备上的当前位置。
-
定位函数:如
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语言提供了几个函数来检查文件操作的错误状态:
ferror:用于检查文件流上的最后一个I/O操作是否出错。其原型为int ferror(FILE *stream);。如果返回非零值,则表示发生了错误。
perror:用于打印描述最近一次错误的字符串。其原型为void perror(const char *s);。其中,s是一个用户提供的错误信息前缀,通常用于指示发生错误的上下文。
feof:用于检查是否已经到达文件末尾。其原型为int feof(FILE *stream);。如果返回非零值,则表示已经到达文件末尾。
(2)错误处理策略
在进行文件操作时,应该遵循以下错误处理策略:
- 在每次调用文件操作函数后,立即检查其返回值或错误状态。
- 如果发现错误,根据具体情况采取适当的措施,如打印错误信息、清理资源并退出程序等。
- 使用
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语言编程笔记:文件处理的艺术
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、为什么要用文件二、文件的分…...
[创业之路-255]:《华为数字化转型之道》-1-主要章节、核心内容、核心思想
目录 前言:数字化转型对于企业而言,是一种全方位的变革 一、主要章节 1、认知篇(第1~2章)- Why 2、方法篇(第3~5章)- How 3、实践篇(第6~10章)- 实践 4、平台篇(第…...
《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?
问题解答: 问:《汽车维修技师》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《汽车维修技师》级别? 答:省级。主管单位:北方联合出版传媒(…...
2024 京东零售技术年度总结
每一次回望,都为了更好地前行。 2024 年,京东零售技术在全面助力业务发展的同时,在大模型应用、智能供应链、端技术、XR 体验等多个方向深入探索。京东 APP 完成阶段性重要改版,打造“又好又便宜”的优质体验;国补专区…...
PyTorch使用教程(8)-一文了解torchvision
一、什么是torchvision torchvision提供了丰富的功能,主要包括数据集、模型、转换工具和实用方法四大模块。数据集模块内置了多种广泛使用的图像和视频数据集,如ImageNet、CIFAR-10、MNIST等,方便开发者进行训练和评估。模型模块封装了大量经…...
如何在不暴露MinIO地址的情况下,用Spring Boot与KKFileView实现文件预览
在现代Web应用中,文件预览是一项常见且重要的功能。它允许用户在不上传或下载文件的情况下,直接在浏览器中查看文件内容。然而,直接将文件存储服务(如MinIO)暴露给前端可能会带来安全风险。本文将介绍如何在不暴露MinI…...
ICMP协议和ICMP重定向攻击
✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网络安全从菜鸟到飞鸟的逆袭 目录 一,ICMP基本概念二&…...
leetcode203-移除链表元素
leetcode203 什么是链表 之前不懂链表的数据结构,一看到链表的题目就看不明白 链表是通过next指针来将每个节点连接起来的,题目中给的链表是单向链表,有两个值,一个val表示值,一个next:表示连接的下一个…...
Rust 中构建 RESTful API
在 Rust 中构建 RESTful API,你可以选择几个不同的框架。每个框架有不同的特点、优缺点和适用场景,下面我将介绍几个常用的 Rust Web 框架,并分析它们的优缺点。 Actix Web 简介: Actix Web 是一个非常高性能的 Web 框架…...
Sqlmap入门
原理 在owasp发布的top10 漏洞里面,注入漏洞一直是危害排名第一,其中数据库注入漏洞是危害的。 当攻击者发送的sql语句被sql解释器执行,通过执行这些恶意语句欺骗数据库执行,导致数据库信息泄漏 分类 按注入类型 常见的sql注入…...
迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?
【图片来源于网络,侵删】 这是2024年初Figure公司展示的人形机器人Figure 01,他可以通过观看人类的示范视频,在10小时内经过训练学会煮咖啡,并且这个过程是完全自主没有人为干涉的! 【图片来源于网络,侵删】…...
移动端 REM 适配
移动端 REM 适配 Vant 中的样式默认使用 px 作为单位,如果需要使用 rem 单位,推荐使用以下两个工具: postcss-pxtorem 是一款 postcss 插件,用于将单位转化为 remlib-flexible 用于设置 rem 基准值 下面我们分别将这两个工具配…...
逐笔成交逐笔委托Level2高频数据下载和分析:20241230
逐笔委托逐笔成交下载 链接: https://pan.baidu.com/s/11Tdq06bbYX4ID9dEaiv_lQ?pwdcge6 提取码: cge6 Level2逐笔成交逐笔委托数据分享下载 利用Level2的逐笔交易和委托数据,这种以毫秒为单位的详细信息能揭露众多关键信息,如庄家意图、伪装行为&…...
C#实现字符串反转的4种方法
见过不少人、经过不少事、也吃过不少苦,感悟世事无常、人心多变,靠着回忆将往事串珠成链,聊聊感情、谈谈发展,我慢慢写、你一点一点看...... 1、string.Reverse 方法 string content "Hello World";string reverseStri…...
UDP 单播、多播、广播:原理、实践
一、引言 在计算机网络通信领域,UDP(User Datagram Protocol,用户数据报协议)是一种重要的传输层协议。它以无连接、低开销的特点,在众多实时性要求高的应用场景中发挥关键作用。UDP 支持单播、多播和广播三种通信模式…...
深入浅出:Go语言中的bytes包与字节串操作详解
标题:深入浅出:Go语言中的bytes包与字节串操作详解 引言 在Go语言的世界里,bytes包是一个非常重要的标准库,它为开发者提供了高效处理字节切片(byte slice)的功能。无论是处理二进制数据、UTF-8编码的字符串,还是进行高效的数据读写操作,bytes包都扮演着不可或缺的角色…...
数据库存储上下标符号,sqlserver 2008r2,dm8
sqlserver 2008r2: 数据类型需要用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进行串口通信时,常常会遇到无法接收数据的情况。这可能与串口设置、连接、设备响应等多方面因素相关。本文将详细讨论如何使用LabVIEW进行串口通信,并提供常见问题的排查与解决方法,帮助用户更高效地进行数据接收调试。通过调整…...
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.存储过程 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 2.MySQL存储过程创建…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
VASP软件在第一性原理计算中的应用-测试GO
VASP软件在第一性原理计算中的应用 VASP是由维也纳大学Hafner小组开发的一款功能强大的第一性原理计算软件,广泛应用于材料科学、凝聚态物理、化学和纳米技术等领域。 VASP的核心功能与应用 1. 电子结构计算 VASP最突出的功能是进行高精度的电子结构计算ÿ…...
