背景:
操作文件是编程必不可少的内容,工作中经常看到各种操作文件的方式,倍感困惑,所以总计了C/C++在windows和linux平台下文件的基本操作
================
C
================
-------- 头文件
<stdio.h>
-------- 相关函数和接口
FILE *fopen( const char * filename, const char * mode );
int fclose( FILE *fp );
int fputc( int c, FILE *fp );
int fputs( const char *s, FILE *fp );
int fgetc( FILE * fp );
char *fgets( char *buf, int n, FILE *fp );
-------- 例子
#include <stdio.h> main() { FILE *fp; fp = fopen("/tmp/test.txt", "w+"); fprintf(fp, "This is testing for fprintf... "); fputs("This is testing for fputs... ", fp); fclose(fp); }
================
C++
================
-------- 头文件
<fstream>
<ifstream>
<ofstream>
-------- 相关函数和接口
void open(const char *filename, ios::openmode mode);
void close();
流插入运算符( << )向文件写入信息
流提取运算符( >> )从文件读取信息
-------- 例子
#include <fstream> #include <iostream> using namespace std; int main () { char data[100]; // 以写模式打开文件 ofstream outfile; outfile.open("afile.dat"); cout << "Writing to the file" << endl; cout << "Enter your name: "; cin.getline(data, 100); // 向文件写入用户输入的数据 outfile << data << endl; cout << "Enter your age: "; cin >> data; cin.ignore(); // 再次向文件写入用户输入的数据 outfile << data << endl; // 关闭打开的文件 outfile.close(); // 以读模式打开文件 ifstream infile; infile.open("afile.dat"); cout << "Reading from the file" << endl; infile >> data; // 在屏幕上写入数据 cout << data << endl; // 再次从文件读取数据,并显示它 infile >> data; cout << data << endl; // 关闭打开的文件 infile.close(); return 0; }
================
windows api
================
-------- 头文件
<windows.h>
-------- 相关函数和接口
CreateFile 创建、打开文件
ReadFile 读取文件内容
WriteFile 写入文件内容
SetFilePointer 移动文件指针
SetEndOfFile 设置文件结尾标志
CopyFile 文件拷贝
DeleteFile 文件删除
MoveFile 文件移动
CreateDirectory 创建一个目录
RemoveDirectory 删除一个目录
GetCurrentDirectory 获取当前程序所在目录
SetCurrentDirectory 设置当前程序所在目录
-------- 例子
#include <windows.h> #include <stdio.h> #include <string.h> int isDirectory(char *path); void help(); int main(int argc, char const *argv[]) { char file_src[MAX_PATH]={0}; char file_dest[MAX_PATH]={0}; // 只输入程序名 和一个参数则调用help if (argc <= 2) { help(); return 0; } memmove(file_src, argv[1], strlen(argv[1])); memmove(file_dest, argv[2], strlen(argv[2])); if( isDirectory(file_dest) ) { // 如果第二个参数是目录, 则拼装新的文件路径 sprintf(file_dest, "%s\%s", file_dest, file_src); } if( CopyFile(file_src, file_dest, 0) == 0) printf("文件复制失败!"); return 0; } // 判断是否为目录 BOOL isDirectory(char *path) { WIN32_FIND_DATA fd; BOOL rel = FALSE; char *p = path; // 查找到第一个文件的句柄 HANDLE hFind = FindFirstFile(path, &fd); while(*p != '