打开文件 用fopeni函数打开文件,将打开的文件作为流使用 ■fopen的原型: FILE *fopen(const char restrict filename, const char restrict mode); 必filename:是要打开的文件名 必filenamer中可以包含文件路径信息 mode指明以什么模式打开文件 函数原型中的restrict:关键字是c99标准新增的,指明 filename和mode与其它变量内存位置没有交叠 restrict>对fopen的行为没有影响,通常可忽略
打开文件 用fopen函数打开文件,将打开的文件作为流使用 fopen的原型: filename是要打开的文件名 filename中可以包含文件路径信息 mode指明以什么模式打开文件 函数原型中的restrict关键字是C99标准新增的,指明 filename和mode与其它变量内存位置没有交叠 restrict对fopen的行为没有影响,通常可忽略 FILE *fopen(const char * restrict filename, const char * restrict mode); 12
打开文件时的路径分隔符处理 在Windows下,需特别注意filename中包含路径时的反 斜杠字符 ■调用 fopen("c:\project test1.dat","r") 会失败,因为C中t是转义字符 一种解决方案是用'代替: fopen("c:\\project\\test1.dat","r") ■另一种解决方案是遵循Uniⅸ规范,用正斜杠代替': fopen("c:/project/test1.dat","r") 13
打开文件时的路径分隔符处理 在Windows下,需特别注意filename中包含路径时的反 斜杠'\'字符 调用 fopen("c:\project\test1.dat", "r") 会失败,因为C中\t是转义字符 一种解决方案是用'\\'代替'\': fopen("c:\\project\\test1.dat", "r") 另一种解决方案是遵循Unix规范,用正斜杠'/'代替'\': fopen("c:/project/test1.dat", "r") 13
fopen的返回值与打开模式 ■fopen返回一个FILE*类型的文件指针: fp fopen("in.dat","r");/opens in.dat for reading * n 当fopen不能打开指定的文件时,返回空指针 ■fopen的mode字符串包含两方面内容 必对文件执行何种操作 必文件是文本格式还是二进制格式
fopen的返回值与打开模式 fopen返回一个FILE*类型的文件指针: fp = fopen("in.dat", "r"); /* opens in.dat for reading */ 当fopen不能打开指定的文件时,返回空指针 fopen的mode字符串包含两方面内容 对文件执行何种操作 文件是文本格式还是二进制格式 14
可用模式字符串 文本文件 二进制文件 模式 含义 模式 含义 "" 读模式打开 "rb" 读模式打开 "w" 写模式打开,文件不存在则 "wb" 写模式打开,文件不存在 创建文件 则创建文件 "a" 附加模式打开,文件不存在 "ab 附加模式打开,文件不存 则创建文件 在则创建文件 "r+" 以读写模式打开,从文件起 "r+b" 以读写模式打开,从文件 始位置读写 /"rb+" 起始位置读写 "w+" 以读写模式打开,文件存在 "w+b"" 以读写模式打开,文件存 则截断文件 wb+" 在则截断文件 "a+" 以读写模式打开,文件存在 "a+b"/"a 以读写模式打开,文件存 测以附加模式操作 b+" 在则以附加模式操作 15
可用模式字符串 文本文件 二进制文件 模式 含义 模式 含义 "r" 读模式打开 "rb" 读模式打开 "w" 写模式打开,文件不存在则 创建文件 "wb" 写模式打开,文件不存在 则创建文件 "a" 附加模式打开,文件不存在 则创建文件 "ab" 附加模式打开,文件不存 在则创建文件 "r+" 以读写模式打开,从文件起 始位置读写 "r+b" /"rb+" 以读写模式打开,从文件 起始位置读写 "w+" 以读写模式打开,文件存在 则截断文件 "w+b"/" wb+" 以读写模式打开,文件存 在则截断文件 "a+" 以读写模式打开,文件存在 则以附加模式操作 "a+b"/"a b+" 以读写模式打开,文件存 在则以附加模式操作 15
文件模式 ■写文件和对文件附加内容使用的模式是不同的 必写文件模式会覆盖原有文件的内容 必附加模式会在文件尾部接着写,不会覆盖原有内容 读写模式转换 读模式向写模式转换:必须首先调用fseek函数或 者目前位置在文件末尾 写模式向读模式转换:必须首先调用fflush或fseek 函数 6
文件模式 写文件和对文件附加内容使用的模式是不同的 写文件模式会覆盖原有文件的内容 附加模式会在文件尾部接着写,不会覆盖原有内容 读写模式转换 读模式向写模式转换:必须首先调用fseek函数或 者目前位置在文件末尾 写模式向读模式转换:必须首先调用fflush或fseek 函数 16