文件操作详解(C语言)

1.为什么要用到文件?怎样数据才能持久化?

保存在内存中的数不安全(一次断电,忘记保存,不用了还给系统)

持久化:保存在硬盘上(放在文件中)

什么是文件?文件分为程序文件数据文件

程序文件是什么呢?

在windows环境下。.c源程序文件 / .obj目标文件 / .exe执行文件,这些就是程序文件

数据文件

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

如图:

编辑.c源程序文件(test.c)可以对A文件(数据文件)进行读写操作进行

2.文件名

一个文件有唯一的文件标识,以便于用户的识别和引用

文件名包含三部分:文件路径 + 文件主干名 + 文件后缀

例:  c:\code\heyerous\test.txt

3.文件的打开 or 关闭

->1. 文件指针

缓冲文件系统中,关键的概念是“文件类型指针”,简称:文件指针

每个被使用的文件都在内存中开辟了一个相应的文件信息区用来存放文件的相关信息(如:文件的名字,文件的状态,文件当前的位置等)。这些信息是保存在一个结构体变量中的,该结构体类型是由系统声明的,取名:FILE

如图:

注:  每打开一个文件就会产生一个文件信息区,每一个文件信息区都需要一个文件指针来指向它。不同的C编译器的FILE类型包含的内容不完全相同,但大同小异

一般都是通过FILE的指针来维护这个FILE结构的变量,这样更方便

创建一个FILE指针的变量:

FILE* pf       //文件指针变量

->2. 文件的打开和关闭

文件在读写之前打开文件,在使用结束之后应该关闭文件

ANSIC(标准C)规定使用fopen函数(打开成功放回文件地址,失败则返回NULL)来打开文件,fclose函数(打开成功返回0,打开失败返回EOF(-1))来关闭文件

fopen和fclose的使用示例:

#include <stdio.h>int main()
{//打开文件FILE* pf = fopen("C:\\code\\heyerous\\test.txt", "r");//判断文件是否打开成功if(pf == NULL){perror("fopen");return 1;}//读写文件//....//关闭文件fclose(pf);pf = NULL;
}

运行结果:

打开成功说明该路径存在这个文件

上面所示代码是用的绝对路径打开的文件 C:\code\heyerous\test.txt

绝对路径

文件的准确位置

相对路径

相对路径的理解,可以认为是程序和文件的相对位置,比如说和当前.c文件在同文件夹中,或者文件在.c文件的上级路径中 (以.c文件为例)

就可以看到该文本文件(test.txt)了

将文件放在上级目录程序依旧可以运行

除了这两个操作以外还其他的操作:

如:“../test.txt”  上级目录   “./text.txt”  当前目录  "././test,txt" 上一级目录的上一级目录

注:  创建文件的时候看看后缀名(扩展名)

4.怎么读写?

1.文件的顺序读写

fputc

->1.  fputc函数    //向文件中写一个字符

int fputc(int charactor, FILE* stream);

(1). FILE* stream 需要写入的文件的指针

(2). int charactor 需要向文件中写的字符

->2.  fputc函数的使用

puts按顺序向文件中写内容

#include <stdio.h>int main()
{//用"w"会将我们上次写入的内容全部覆盖掉FILE* pf = fopen("C:\\code\\heyerous\\test.txt", "w"); if (NULL == pf){perror("fopen");return 1;}//方法1/*fputc('z', pf);fputc('y', pf);fputc('x', pf);fputc('6', pf);*///方法2:使用for循环for (char ch = 'A'; ch <= 'Z'; ch++){fputc(ch, pf);}fclose(pf);pf = NULL;return 0;
}

运行结果:

向文件写一个字符,不是字符串!!!

fgetc

->1. fgetc函数    //向文件中读一个字符

int fgetc(FILE* stream);

(1). 按顺序向文件读字符

(2). FILE* stream   需要读文件的指针

->2. fgetc函数的使用

#include <stdio.h>int main()
{FILE* pf = fopen("C:\\code\\heyerous\\test.txt", "r"); if (NULL == pf){perror("fopen");return 1;}int ch = fgetc(pf);printf("%c", ch);ch = fgetc(pf);printf("%c", ch);ch = fgetc(pf);printf("%c", ch);fclose(pf);pf = NULL;return 0;
}

运行结果:

fputs

->1. fputs函数   //向文件中写入一行内容

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

(1). const char *string  需要写入文件的内容

(2). FILE *stream 目标文件

->2. fputs函数的使用  

这里我们换用相对路径

#include <stdio.h>int main()
{FILE* pf = fopen("test.txt", "w");if(NULL == pf){perror("fopen");return 1;}fputs("hello world", pf);fclose(pf);pf ==NULL;return 0;
}

运行结果:

fgets

->1. fgets函数 //向文件读一行内容

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

(1). char *string  将读到的内容放到另一个空间中

(2). int n  个数限制

(3). FILE *stream 需要读的文件的指针

->2. fgets函数的使用

#include <stdio.h>
int main()
{FILE* pf = fopen("test.txt", "r");if (NULL == pf){perror("fopen");return 1;}char buf[25] = { 0 };fgets(buf, 12, pf);printf(buf);fclose(pf);pf = NULL;return 0;
}

运行结果:

注:  fgets读文件时会留一个空间存放\0,所以我们想要将hello world全部都读出来得限制12个个数(包括\0)

如果buf空间比文件中一行大,即:fgets只读一行的内容

1.buf > num, 直接读到末尾结束,第二行不管,只管第一行得内容

2.buf < num,只读num数量的字符

fprintf

->1. fprintf函数   //将格式化的内容写到文件中  

int fprintf(FILE* stream, const char*format, ...);

(1). FILE* stream  需要写入的文件的指针

(2). const char*format  数据流:格式化字符串等各种信息

(3). ...  可变参数列表可接收多个参数

->2. fprintf函数的使用

#include <stdio.h>typedef struct S
{char name[20];int age;float score;
}S;int main()
{FILE* pf = fopen("test.txt", "w");if(FILE == NULL){perror("fopen");reutrn 1;}s stu = {"zhangsan", 20, 89.5}; fprintf(pf, "%s %d %f", stu.name, stu.age, stu.score);fclose(pf);pf = NULL;return 0;
}

运行结果:

 fscanf

->1. fscanf函数   //将格式化的内容写到文件中  

int fscanf(FILE* stream, const char*format, ...);

(1). FILE* stream  需要写入的文件的指针

(2). const char*format  数据流:格式化字符串等各种信息

(3). ...  可变参数列表可接收多个参数

->2. fprintf函数的使用

#include <stdio.h>typedef struct S
{char name[20];int age;float score;
}S;int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}S stu = { 0 };fscanf(pf, "%s %d %f", stu.name, &(stu.age), &(stu.score));printf("%s %d %f", stu.name, stu.age, stu.score);fclose(pf);pf = NULL;return 0;
}

运行结果:


以上函数操作时写入文件都看得懂,因为是文本信息(适用于所有输入输出流)

我们将数据传给输出设备如果这些设备的读写的都不相同,程序要使用的话都需要了解,那对一个程序来说太复杂了,所以为了解决这个问题C语言引入了流(stream)

将数据输出到流上,然后通过流输出到设备上

任何一个C语言程序运行的时候:默认打开3个流

1.stdin - 标准输出(键盘)

2.stdout - 标准输出(屏幕)

3.stderr - 标准错误(屏幕)

这三个流的类型都是FILE*

例1:

int ch = fgets(stdin)
fputc(ch, stdout)

从键盘上读一个字符然后写到屏幕上

例2:

#include <stdio.h>typedef struct stu
{char name[20];int age;float score;
}stu;int main()
{stu p = { 0 };fscanf(stdin, "%s %d %f", p.name, &(p.age), &(p.score));fprintf(stdout, "%s %d %f", p.name, p.age, p.score);return 0;
}

运行结果:

fwrite

->1. fwrite函数  //以二进制的方式向文件中写入

size_t fwrite(const void *ptr, size_t size, size_t count, FILE* stream)

(1). const void *ptr  需要写入数据的地址

(2). size_t size   每个元素的大小

(3). size_t count   需要写入文件的元素个数

(4). FILE *stream   该文件的指针

->2. fwrite函数的使用

#include <stdio.h>typedef struct stu
{char name[20];int age;float score;
}stu;int main()
{FILE *pf = fopen("test.txt", "wb"); //wb以二进制的方式写if(NULL ==pf){perror("fopen");return 1;}stu p = {"zhangsan", 20, 85.5};fwrite(&p, sizeof(stu), 1, pf);fclose(pf);pf = NULL;return 0;    
}

运行结果:

从运行结果来看,确实是以二进制的形式写进去的

 fread

->1. fread函数  //以二进制的方式读文件

size_t fwrite(void *ptr, size_t size, size_t count, FILE* stream)

(1). void *ptr  存放向文件读到的数据

(2). size_t size   每个元素的大小

(3). size_t count   需要写入文件的元素个数

(4). FILE *stream   该文件的指针

->2. fread函数的使用

#include <stdio.h>typedef struct stu
{char name[20];int age;float score;
}stu;int main()
{FILE *pf = fopen("test.txt", "rb"); //以二进制的形式读if(NULL == pf){perror("fopen");return 1;}stu s = { 0 };fread(&s, sizeof(stu), 1, pf);fclose(pf);pf = NULL;return 0;
}

运行结果:

可以看到fread将文件的内容放入了结构体变量s上

sprintf

->1. sprintf函数  //把格式化的数据,以字符串的格式打印存放在一个字符串中

int sprintf(const char* s, const char* format, ...);

(1). const char* s  存放数据的地址

(2). const* format   数据流:格式化字符串等各种信息

(3). ...   可变参数列表,可以放多个参数

->2. sprintf函数的使用

#incldue <stdio.h>typedef struct tmp
{char name[20];int age;float score;
}tmp;int main()
{tmp s = {"zhangsan", 20, 86.5};char buf[30] = { 0 };sprintf(buf, "%s%d%f", s.name, s.age, s.score);printf(buf);return 0;
}

运行结果:

 sscanf

->1. sscanf函数  //从一个字符串中,还原出一个格式化的数据

int sscanf(const char* s, const char* format, ...);

(1). const char* s  存放数据的地址

(2). const* format   数据流:格式化字符串等各种信息

(3). ...   可变参数列表,可以放多个参数

->2. sscanf函数的使用

#include <stdio.h>typedef struct tmp
{char name[20];int age;float score;
}tmp;int main()
{tmp s = { 0 };char buf[30] = { "zhangsan 20 86.5" };sscanf(buf, "%s%d%f", s.name, &(s.age), &(s.score));printf("%s %d %f", s.name, s.age, s.score);return 0;
}

运行结果:


scanf - 从键盘(stdin)上读取格式化的数据

printf - 把数据输出到屏幕(stdout)上

fprintf - 针对所有输入流的格式化的输入函数:stdin,打开的文件

fscanf - 针对所有的输出流的格式化的输出函数:stdout,打开的文件

5.文件的随机读写

fseek

->1. fseek函数  //调整光标位置

int fseek(FILE* stream, long int offset, int orgin);

(1). FILE* stream  目标文件

(2). long int offset   偏移量(往哪偏移)

(3). int orgin  从哪开始调整

​​​SEEK_SET    文件开始的位置

SEEK_CUR   光标现指向的位置

SEEK_END   文件末尾位置

->2. fseek函数的使用

 例:

文本文件中的内容

#include <stdio.h>int main()
{FILE* pf = fopen("test.txt", "r");if (NULL == pf){perror("fopen");return 1;}int ch = fgetc(pf);ch = fgetc(pf);printf("%c\n", ch);ch = fgetc(pf);//此时光标在字符c的后面d的前面,如果继续往下读肯定回到d,但是我们调整一下去读bfseek(pf, 1, SEEK_SET);// 或者fseek(pf, -2, SEEK_SUR);//这时往下读就会读到bch = fgetc(pf);printf("%c", ch);fclose(pf);pf = NULL;return 0;
}

运行结果:

ftell

->1. ftell函数  //返回文件指针相对于起始位置的偏移量

long int fseek(FILE* stream);

(1). FILE* stream  目标文件

#include <stdio.h>int main()
{FILE* pf = fopen("test.txt", "r");if (NULL == pf){perror("fopen");return 1;}int ch = fgetc(pf);printf("%c\n", ch);ch = fgetc(pf);printf("%c\n", ch);int pos = ftell(pf);printf("%d", pos);fclose(pf);pf = NULL;return 0;
}

运行结果:

->2. rewind函数的使用

#include <stdio.h>int main()
{FILE *pf = fopen("test.txt", "r");if(NULL == pf){perror("fopen");return 1;}int ch = fgetc(pf);printf("%c\n", ch);rewind(pf);ch = fgetc(pf);printf("%c", ch);fclose(pf);pf = NULL;return 0;
}

rewind

->1. rewind函数  //使指针回到初始位置

void rewind( FILE *stream );

(1). FILE *stream  需要调整文件的指针

->2. rewind函数的使用

#include <stdio.h>int main()
{FILE *pf = fopen("test.txt", "r");if(NULL == pf){perror("fopen");return 1;}int ch = fgetc(pf);printf("%c\n", ch);rewind(pf);ch = fgetc(pf);printf("%c", ch);fclose(pf);pf = NULL;return 0;
}

运行结果:

6.文本文件和二进制文件

数据文件被称为文本文件或者二进制文件

数据在内存中以二进制的形式存储,如果不加转换的输出到外存(文件),就是二进制文件

在外存上以ASCII码的形式储存,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件

测试代码:

#include <stdio.h>int main()
{FILE* pf = fopen("test.txt", "wb");if (NULL == pf){perror("fopen");return 1;}int a = 10000;fwrite(&a, 4, 1, pf);fclose(pf);pf = NULL;return 0;
}

运行结果:

可以看到是二进制文件

我们来看看它是否是如我们所说的二进制一样

 

然后添加这个文件

添加进来之后右击点击这个文件,选择打开方式,点击二进制编辑器

可以看到是以十六进制的方式写的,因为这样更加方便表达展现,而且字节存储方式是小端

#include <stdio.h>int main()
{FILE* pf = fopen("test.txt", "w");if (NULL == pf){perror("fopen");return 1;}int a = 10000;fprintf(pf, "%d", a);fclose(pf);pf = NULL;return 0;
}

运行结果:

文本文件

7.文件读取结束的判定

feof 和 ferror

int ferror( FILE *stream );
int feof( FILE *stream );

(1). FILE *stream - 需要判断的文件

feof - 文件正常读取遇到了结束标志而结束就返回真

ferror - 返回真,说明文件在读取过程中出错了而结束

用这两个函数的前提是文件已经读取结束了才可以去使用这两个函数

用于文件读取结束的时候,判断是读取失败,还是到文件末尾结束 

1.文本文件读取是否结束,判断返回值是否为EOF(fgetc),NULL(fgets)

例如:

  • fgetc判断是否为EOF
  • fgets判断是否为NULL

文本文件的例子:

#include <stdio.h>
#define EXIT_FAILURE 1int main()
{FILE *pf = fopen("test,txt", "r");if(NULL == pf){perror("file opening failed");return EXIT_FAILURE;}int ch;while((ch = fgetc(pf)) != EOF)  //fgetc的返回值是int类型{putchar(ch);}//判断是什么原因结束的//判断文件是否是读取时遇到错误结束if(ferror(pf))puts("I/O error when reading"); //I/O读取文件else if(feof(pf))puts("End of file reached successfully");fclose(pf);pf = NULL;return 0;
}

2.二进制文件的读取结束判断,判断返回值是否小于实际要读的个数

例如:

  • fread 判断返回值是否小于实际要读的个数

二进制文件的例子:

#include <stdio.h>enum     //没有枚举名作用和define差不多,文本替换
{size = 5,  
};int main()
{FILE* pf = fopen("test.txt", "wb");if (NULL == pf){perror("FILE fopening failed");return 1;}int a[size] = { 1, 2, 3, 4, 5, };fwrite(a, sizeof * a, size, pf);fclose(pf);pf = NULL;return 0;
}
//以上代码是将数组a中的容写进文件test.txt
#include <stdio.h>enum     //没有枚举名作用和define差不多,文本替换
{size = 5,  
};int main()
{FILE* pf = fopen("test.txt", "rb");int a[size] = { 0 };size_t ret_code = fread(a, sizeof *a, size, pf);if (ret_code == size){perror("FILE fopening failed");return 1;}else if(feof(pf)){puts("Error reading test.txt: unexpected end of file\n");}else if(ferror(pf)){puts("Error reading test.txt");}fclose(pf);pf = NULL;return 0;
}

8.文件缓冲区

我们将数据冲数据区输出/输入到磁盘(文件)的时候不是直接输入/输出过去而是先经过缓冲区,通过缓冲区进入磁盘的,但是我们放到缓冲区的数据不会直接进入到磁盘,要怎么才能将数据放到磁盘了

将数据放入磁盘的条件

(1). 缓冲区放满的时候,缓冲区会自动将数据放入磁盘

(2). 主动刷新缓冲区的时候,缓冲区会将数放入磁盘

(3). 使用fclose关闭文件时,也会主动刷新缓冲区的将数据写到硬盘中然后关闭文件

 注:

因为有缓冲区的存在,C语言在操作文件的时候。需要做刷新缓冲区或者在文件操作结束的时候关闭文件   很重要!!!(保存信息)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/38165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件

章节内容 上一节完成&#xff1a; HDFS的简介内容HDFS基础原理HDFS读文件流程HDFS写文件流程 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&#xff0c;但是没留下…

如何保护应用?可快速部署的WAF服务器分享

Web应用攻击是安全事件和数据泄露的主要原因。相关统计表明&#xff0c;超过四分之三的网络犯罪直指应用及其漏洞。为保护数量日益增长的应用安全&#xff0c;Web应用防火墙(WAF)因此而生。本文则聚焦于WAF服务器&#xff0c;了解它的性能与具体的实践应用。   新加坡网络安全…

《单片机》期末考试复习-学习笔记总结

题型 问答题(15分)编程题(65分)编程题1(20分)编程题2(45分)设计题(20分)一、问答题 1.1.单片机概念和特点 1.2. 51单片机的中断结构 1.3.主从式多机通讯的概念及其工作原理 多机通信是指两台以上计算机之间的数据传输,主从式多机通信是多机通信系统中最简单的一种,…

PHP电商系统开发指南最佳实践

电子商务系统开发的最佳实践包括&#xff1a;数据库设计&#xff1a;选择适合关系型数据库&#xff0c;优化数据结构&#xff0c;考虑表分区&#xff1b;安全&#xff1a;加密数据&#xff0c;防止 sql 注入&#xff0c;处理会话管理&#xff1b;用户界面&#xff1a;遵循 ux 原…

vue3长列表优化,使用vue-virtual-scroller实现直播间弹幕列表虚拟滚动效果

使用的组件库是&#xff1a;https://github.com/Akryum/vue-virtual-scroller 官方文档&#xff1a;vue-virtual-scroller 安装依赖 npm install --save vue-virtual-scrollernextpnpm install --save vue-virtual-scrollernextyarn add vue-virtual-scrollernext 组件导入…

如何用文章改写ai软件进行改写?5个软件教你快速进行修改文章

如何用文章改写ai软件进行改写&#xff1f;5个软件教你快速进行修改文章 使用AI改写软件可以帮助你快速重写文章&#xff0c;使其更加流畅、符合要求或避免重复。以下是五款优质的AI改写软件&#xff0c;它们能够帮助你快速进行文章修改&#xff1a; 聪明灵犀 这是一款非常简…

数据结构_1.0

一、数据结构概述 1.1 概念 在计算机科学中&#xff0c;数据结构是一种数据组织、管理和存储的格式 。它是相互之间存在一种或多种特定关系的数据元素的集合。通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技…

【开源合规】开源许可证基础知识与风险场景引入

文章目录 什么是开源许可证(License)?开源许可证有什么用?开源许可证分类开源许可证分类及描述公共代码 (Public Domain)CC0无License宽松型许可证 (Permissive)MITApache 2.0BSD弱互惠型许可证 (Weak Copyleft)LGPLMPLEPL互惠型许可证 (Reciprocal)GPLEUPL强互惠许可证 (Str…

Linux——查找文件-find(详细)

查找文件-find 作用 - 按照文件名、大小、时间、权限、类型、所属者、所属组来搜索文件 格式 find 查找路径 查找条件 具体条件 操作 注意 - find命令默认的操作是print输出 - find是检索文件的&#xff0c;grep是过滤文件中字符串 参数 参数 …

Unity海面效果——4、法线贴图和高光

Unity引擎制作海面效果 大家好&#xff0c;我是阿赵。 继续做海面效果&#xff0c;上次做完了漫反射颜色和水波动画&#xff0c;这次来做法线和高光效果。 一、 高光的计算 之前介绍过高光的光照模型做法&#xff0c;比较常用的是Blinn-Phong 所以我这里也稍微连线实现了一下 …

API 授权最佳实践

API&#xff08;应用程序编程接口&#xff09;就像秘密之门&#xff0c;允许不同的软件程序进行通信。但并不是每个人都应该拥有每扇门的钥匙&#xff0c;就像不是每个软件都应该不受限制地访问每个 API 一样。 这些 API 将从银行的移动应用程序到您最喜欢的社交媒体平台的所有…

某智能装备公司如何实现多个工程师共用1台图形工作站

在当今快速发展的科技领域&#xff0c;资源共享和高效利用已成为企业提升竞争力的关键&#xff0c;特别是在工程设计和研发领域。如何最大化地利用有限的资源&#xff0c;如工作站&#xff0c;成为了许多公司面临的挑战。某智能装备公司便是在这样的背景下&#xff0c;通过云飞…

【自动驾驶汽车通讯协议】深入理解PCI Express(PCIe)技术

文章目录 0. 前言1. PCIe简介1.1 PCIe外观1.2 PCIe的技术迭代 2. PCIe的通道&#xff08;lane&#xff09;配置2.1 通道配置详解2.2 通道配置的影响 3. PCIe的架构3.1 架构层次3.2 核心组件 4. PCIe的特性5. PCIe在自动驾驶中的应用 0. 前言 按照国际惯例&#xff0c;首先声明&…

【产品运营】Saas的核心六大数据

国内头部软件公司的一季度表现惨不忍睹&#xff0c;为啥美国的还那么赚钱呢&#xff1f;其实核心是&#xff0c;没几个Saas产品经理是看数据的&#xff0c;也不知道看啥数据。 SaaS 行业&#xff0c;天天抛头露面、名头叫的响的 SaaS 产品&#xff0c;真没有几个赚钱的。 那为…

电子看板,帮助工厂实现数字化管理

在数字化浪潮的推动下&#xff0c;制造业正经历着深刻的变革&#xff0c;数字工厂成为了行业发展的新趋势。而生产管理看板作为一种重要的管理工具&#xff0c;在提升数字工厂管理效率方面发挥着关键作用。 生产管理看板通过实时数据的展示&#xff0c;为数字工厂提供了清晰的全…

【算法学习】射线法判断点在多边形内外(C#)以及确定内外两点连线与边界的交点

1.前言&#xff1a; 在GIS开发中&#xff0c;经常会遇到确定一个坐标点是否在一块区域的内部这一问题。 如果这个问题不是一个单纯的数学问题&#xff0c;例如&#xff1a;在判断DEM、二维图像像素点、3D点云点等含有自身特征信息的这些点是否在一个区域范围内部的时候&#x…

基于uniapp(vue3)H5附件上传组件,可限制文件大小

代码&#xff1a; <template><view class"upload-file"><text>最多上传5份附件&#xff0c;需小于50M</text><view class"" click"selectFile">上传</view></view><view class"list" v…

CCAA:认证通用基础 10(审核的概念、审核有关的术语、审核的特征、审核原则)

10.审核的概念、审核有关的术语、审核的特征、审核原则 10.1审核的基本概念 第一章 审核基础知识 第一节 概述 1.什么是审核 审核是认证过程中最基本的活动&#xff0c;是审核方案的重要组成部分&#xff0c;其实施效果直接影响到审核方案的意图和审核目标的达成。 在认证…

外贸企业选择什么网络?

随着全球化的深入发展&#xff0c;越来越多的国内企业将市场拓展到海外。为了确保外贸业务的顺利进行&#xff0c;企业需要建立一个稳定、安全且高速的网络。那么&#xff0c;外贸企业应该选择哪种网络呢&#xff1f;本文将为您详细介绍。 外贸企业应选择什么网络&#xff1f; …

VehicleSPY的安装与使用

VehicleSPY介绍 Vehicle Spy 是美国英特佩斯公司的一款集成了诊断、节点/ECU仿真、数据获取、自动测试和车内通信网络监控等功能的工具&#xff0c;Vehicle Spy软件支持的应用场景很多&#xff0c;无法一一列举&#xff0c;以下是一些常见的应用&#xff1a; 总线监控&#x…