我有这个问题,我必须将数据附加到文件的末尾。但我应该只使用'r'
和'w'
模式。我不能使用'a'
或'a+'
或'w+'
或'r+'
模式。
所以我做的是,将文件的内容放在缓冲区中,以'w'
模式打开文件,然后执行写操作。之后,将缓冲区的内容写入文件。它工作正常,但是当我使用cat
打开文件时,输出不是预期的。我之间可以看到一些垃圾。
代码如下,假设文件已经包含一些数据
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
void main()
{
char str[50];
char abuf[500];
int szf;
FILE *fp;
memset(str, 0, sizeof(str));
printf("enter string \n");
gets(str);
printf("string entered is: %s \n", str);
memset(abuf, 0, sizeof(abuf));
printf("done memset \n");
fp=fopen("smple.txt","r");
if(fp==NULL) { fopen("smple.txt","w"); }
else{
fseek(fp, 0, SEEK_END);
printf("done fseek \n");
szf=ftell(fp);
printf("done ftell \n");
fseek(fp, 0, SEEK_SET);
printf("done fseek set \n");
fread(abuf, sizeof(char), szf+1, fp);
printf("abuf is: %s \n", abuf);
fclose(fp);
fp=fopen("smple.txt", "w");
fwrite(str, sizeof(str), strlen(str), fp);}
fwrite(abuf, sizeof(str), strlen(abuf), fp);
fclose(fp);
}
答案 0 :(得分:0)
除了RetiredNinja发表的评论之外,我还补充说你实际上已经尝试过添加数据 - 将数据添加到文件的开头,而不是结尾。 (abuf应该写在str之前的文件中)
由于您没有为abuf动态分配内存,因此您也只有500字节的限制。
我建议如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main()
{
char fileExists = 0;
long existingLength;
char *existingData;
char inputBuffer[1024];
printf("Enter text: ");
gets(inputBuffer);
FILE *output;
output = fopen("smpl.txt", "r");
if (output != NULL)
{
fseek(output, 0, SEEK_END);
existingLength = ftell(output);
existingData = (char*)malloc(sizeof(char) * existingLength);
fseek(output, 0, SEEK_SET);
fread(existingData, 1, existingLength, output);
fclose(output);
fileExists = 1;
}
output = fopen("smpl.txt", "w");
if (fileExists)
fwrite(existingData, sizeof(char), existingLength, output);
fwrite(inputBuffer, sizeof(inputBuffer[0]), strlen(inputBuffer), output);
fclose(output);
}