【发布时间】:2018-06-21 19:10:09
【问题描述】:
我想删除文本文件的最后一个字符。我有一个保存字符串的代码,我只需要删除最后一个'\n'。
我已经尝试过:
fseek(fp, -1, SEEK_END);
fputs("", fp);
这是完整的代码:
void saveGIF(FrameNode** head)
{
FILE* fp = 0;
FrameNode* curr = *head;
int i = 1;
int howManyFrames = framesInList(head);
char c = 0;
char filePath[SIZE] = { 0 };
if (curr == NULL)
{
printf("Nothing to save, add more frames and than save\n");
}
else
{
printf("Where to save the project? enter a full path and file name\n");
getchar();
myFgets(filePath, SIZE);
fp = fopen(filePath, "w+");
if (fp != NULL)
{
while (curr)
{
fprintf(fp, "%s %d %s\n", curr->frame->name, curr->frame->duration, curr->frame->path);
curr = curr->next;
i++;
}
fseek(fp, -1, SEEK_END);
fputs("", fp);
fclose(fp);
}
else
{
printf("Error! canot create file\n");
}
}
}
【问题讨论】:
-
您可能必须编写一个全新的文件,尽管看起来应该有一个合理的解决方案。我怀疑它是否会涉及
fputs,如果它确实存在的话。 -
平台?在 POSIX 上,答案是
ftruncate()或truncate()。在 Windows 上,答案可能会有所不同。 -
副本中得分第二高的答案涵盖 Windows,并且有一些与 Win64 等相关的 cmets。我的答案也有链接——指向 MSDN 和其他答案。
-
您可以使用
fputs(" ", fp)用空白覆盖最后的换行符,但写入空字符串不会更改文件内容。您还可以使用fwrite()在换行符上写入一个空字节。但是,与truncate()及其相关函数不同,这些都不会缩短文件。 -
@user3121023 谢谢你的回答很完美
标签: c