在C语言的文件操作中,如何修改文件的内容。读了很多资料发现很难直接在原来的文件中直接修改,一种间接的方法是,先将原来的文件修改的内容存放到一个临时文件中,接着将原来的文件删除,最后将临时文件名改为原来的文件。下面的例子展示这个操作的过程。在这个例子中,原来的文件中是存放了一些四则运算的例子,如下图:
#include
#include
int oper(int a, int b, char op) {
switch (op) {
case ‘+’:return a + b;
case ‘-’:return a – b;
case ‘‘:return a * b;
case ‘/’:return a / b;
}
}
//这个函数用来获取某一个字符在字符串中最后的位置下标
int findLastChar(char src, char ch) {
int pos = -1;
for (int i = 0; src[i] != ‘\0’; i++) {
if (src[i] == ch)pos = i;
}
return pos;
}
//从src字符串中取子串,位置从start到end,包含start和end位置。
char* getSubStr(char* src, int start, int end) {
int i, j;
char* p = (char*)calloc(sizeof(char), 100);
for (i = start, j = 0; i<=end; i++, j++) {
p[j] = src[i];
}
return p;
}
void main(int argv,char args[]) {
int a, b;//a,b分别用来存放四则运算的两个操作数
char op; //c用来存放四则运算的操作符
char oldPathName[100];
char tempPathName;
int pos;
strcpy(oldPathName, args[1]);//将从main函数参数输入的文件路径和文件名复制到oldPathName中
FILE fp = fopen(oldPathName, “r+”);
pos = findLastChar(oldPathName, ‘\’);//找到最后一个’\‘字符的位置,用来取出路径
tempPathName = getSubStr(oldPathName, 0, pos);//从oldPathName字符串第一个字符开始到最后一个’\’字符结束,取出原来文件的路径
strcat(tempPathName,“temp.txt”); //在同一个路径下,新建一个temp.txt临时文件,用来临时存放修改后的数据。这里是组合成一个新的临时文件路径和文件名
FILE fpw = fopen(tempPathName, “w”);
while (!feof(fp)) {
fscanf(fp, “%d%c%d”, &a, &op, &b); //从原来的文件读取操作数和操作符
if (feof(fp))break;//如果文件到达结尾则结束,这个判断用来防止最后一个数据存放两次,因为feof函数是判断最后一个位置前面的位置。
fprintf(fpw, “%d%c%d=%d\n”, a, op, b, oper(a, op, b));//运算表达式和结果,写到临时文件中
}
//要先关闭两个文件才能执行后面的删除和更名操作。
fclose(fp);
fclose(fpw);
remove(oldPathName);//将原来的文件删除
rename(tempPathName,oldPathName); //将临时文件名改为原来的文件名,路径也是一样的
}
经过上面程序运行后,结果如下: