fprintf与fscanf
int fprintf(FILE *fp,char *format,...)
将格式化的数据写入流
stream
指向一个指针FILE标识输出流的对象。
format
包含要写入流的文本的C字符串。
它可以选择包含嵌入式_格式说明符_这些值将替换为后续附加参数中指定的值,并按要求设置格式。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main() {
FILE* f;
char name[100];
f = fopen("d:\\4.txt", "w");
for (int i = 0; i < 3; i++)
{
puts("请输入姓名:");
gets(name);
fprintf(f, "姓名:%d,%10s\n", i + 1, name);
}
fclose(f);
}
rewind 函数
C 库函数 *void rewind(FILE stream) 设置文件位置为给定流 stream 的文件的开头。
void rewind(FILE *stream)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main() {
char str1[10], str2[10], str3[10];
int year;
FILE* fp;
fp = fopen("file.txt", "w+");
fputs("We are in 2014", fp);
rewind(fp);
fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
printf("Read String1 |%s|\n", str1);
printf("Read String2 |%s|\n", str2);
printf("Read String3 |%s|\n", str3);
printf("Read Integer |%d|\n", year);
fclose(fp);
}
ferror函数
测试给定流 stream 的错误标识
int ferror(FILE *stream)
- stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
如果设置了与流关联的错误标识符,该函数返回一个非零值,否则返回一个零值。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main() {
FILE* f;
f = fopen("d:\\41.txt", "r");
if (f == NULL) {
printf("读取失败");
}
else {
printf("读取成功");
if (ferror(f) == 0) {
printf("文件正常");
}
else {
printf("文件出错");
}
}
fclose(f);
}
perror 函数
把一个描述性错误消息输出到标准错误 stderr。首先输出字符串 str,后跟一个冒号,然后是一个空格。
void perror(const char *str)
- str -- 这是 C 字符串,包含了一个自定义消息,将显示在原本的错误消息之前。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main() {
FILE* f;
f = fopen("d:\\41.txt", "r");
if (f == NULL) {
//打印出错误
perror("ERROR:");
return -1;
}
fclose(f);
}
Error: : No such file or directory
clearerr 函数
清除给定流 stream 的文件结束和错误标识符。
void clearerr(FILE *stream)
- stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
clearerr的作用是使文件错误标志和文件结束标志置为0.假设在调用一个输入输出函数时出现了错误,ferror函数值为一个非零值。在调用clearerr(fp)后,ferror(fp)的值变为0。
rewind函数
设置文件位置为给定流 stream 的文件的开头。
void rewind(FILE *stream)
- stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main() {
FILE* f;
f = fopen("d:\\1.txt", "r");
//没有到文件结尾就继续
while (!feof(f))
{
char c = fgetc(f);
putchar(c);
}
printf("\n");
rewind(f);//跳到文件头
char str[100] = { 0 };
while (fgets(str,100,f)!=NULL)
{
printf("%s", str);
}
fclose(f);
}
ftell
返回给定流 stream 的当前文件位置。
long int ftell(FILE *stream)
- stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
该函数返回位置标识符的当前值。如果发生错误,则返回 -1L,全局变量 errno 被设置为一个正值。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main() {
FILE* f;
int len;
f = fopen("d:\\1.txt", "r");
fseek(f, 0, SEEK_END);
len = ftell(f);
fclose(f);
printf("文件长度:%d", len);
}
fseek 函数
设置流 stream 的文件位置为给定的偏移 offset,参数 offset 意味着从给定的 whence 位置查找的字节数。
int fseek(FILE *stream, long int offset, int whence)
- stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
- offset -- 这是相对 whence 的偏移量,以字节为单位。
- whence -- 这是表示开始添加偏移 offset 的位置。它一般指定为下列常量之一:
常量 | 描述 |
SEEK_SET | 文件的开头 |
SEEK_CUR | 文件指针的当前位置 |
SEEK_END | 文件的末尾 |
如果成功,则该函数返回零,否则返回非零值。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main() {
FILE* f;
f = fopen("d:\\2.txt", "w+");
fputs("this is test", f);
fseek(f, 5, SEEK_SET);
//从5这个位置开加覆盖
fputs(" hello ", f);
fclose(f);
}
在文件尾添加字符
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main() {
FILE* f;
f = fopen("d:\\2.txt", "w+");
fputs("this is test", f);
fseek(f, 0, SEEK_END);
//在最后添加
fputs(" hello ", f);
fclose(f);
}
取得最后几个字符
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main() {
FILE* f;
f = fopen("d:\\2.txt", "r");
fputs("this is test", f);
//从最后退6个字节
fseek(f, -6, SEEK_END);
while (!feof(f))
{
char c = fgetc(f);
putchar(c);
}
fclose(f);
}
remove 函数
删除给定的文件名 filename,以便它不再被访问。
int remove(const char *filename)
- filename -- 这是 C 字符串,包含了要被删除的文件名称。
如果成功,则返回零。如果错误,则返回 -1,并设置 errno。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main() {
char* path = "D:\\1.txt";
remove(path);
}
mktemp 函数
char * mktemp(char * template);
mktemp()用来产生唯一的临时文件名。参数template所指的文件名称字符串中最后六个字符必须是XXXXXX。产生后的文件名会借字符串指针返回。
文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
头文件是io.h。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<io.h>
void main() {
int fd;
char template[] = "d:\\template-XXXXXX";
fd = _mktemp(template);
printf("template = %s\n", template);
}
stat()函数
头文件
#include <sys/stat.h> #include <unistd.h>
int stat(const char * file_name, struct stat *buf);
struct stat
{
dev_t st_dev; //device 文件的设备编号
ino_t st_ino; //inode 文件的i-node
mode_t st_mode; //protection 文件的类型和存取的权限
nlink_t st_nlink; //number of hard links 连到该文件的硬连接数目, 刚建立的文件值为1.
uid_t st_uid; //user ID of owner 文件所有者的用户识别码
gid_t st_gid; //group ID of owner 文件所有者的组识别码
dev_t st_rdev; //device type 若此文件为装置设备文件, 则为其设备编号
off_t st_size; //total size, in bytes 文件大小, 以字节计算
unsigned long st_blksize; //blocksize for filesystem I/O 文件系统的I/O 缓冲区大小.
unsigned long st_blocks; //number of blocks allocated 占用文件区块的个数, 每一区块大小为512 个字节.
time_t st_atime; //time of lastaccess 文件最近一次被存取或被执行的时间, 一般只有在用mknod、utime、read、write 与tructate 时改变.
time_t st_mtime; //time of last modification 文件最后一次被修改的时间, 一般只有在用mknod、utime 和write 时才会改变
time_t st_ctime; //time of last change i-node 最近一次被更改的时间, 此参数会在文件所有者、组、权限被更改时更新
};
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<io.h>
#include<sys/stat.h>
void main() {
struct stat buf;
stat("d:/4.txt", &buf);
printf("size:%d", buf.st_size);
}
mkdir 函数
int mkdir(const char *pathname, mode_t mode);
以mode方式创建一个以pathname为名字的目录,mode定义所创建目录的权限
mode方式:
S_IRWXU | 00700权限,代表该文件所有者拥有读,写和执行操作的权限 |
S_IRUSR(S_IREAD) | 00400权限,代表该文件所有者拥有可读的权限 |
S_IWUSR(S_IWRITE) | 00200权限,代表该文件所有者拥有可写的权限 |
S_IXUSR(S_IEXEC) | 00100权限,代表该文件所有者拥有执行的权限 |
S_IRWXG | 00070权限,代表该文件用户组拥有读,写和执行操作的权限 |
S_IRGRP | 00040权限,代表该文件用户组拥有可读的权限 |
S_IWGRP | 00020权限,代表该文件用户组拥有可写的权限 |
S_IXGRP | 00010权限,代表该文件用户组拥有执行的权限 |
S_IRWXO | 00007权限,代表其他用户拥有读,写和执行操作的权限 |
S_IROTH | 00004权限,代表其他用户拥有可读的权限 |
S_IWOTH | 00002权限,代表其他用户拥有可写的权限 |
S_IXOTH | 00001权限,代表其他用户拥有执行的权限 |
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<io.h>
#include<sys/stat.h>
#include<sys/types.h>
void main() {
mkdir("d:\\head", 00700);
}