【问题标题】:How to delete the last char in a text file in c? [duplicate]如何在c中删除文本文件中的最后一个字符? [复制]
【发布时间】: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


【解决方案1】:

在 ISO C 中,这样做的唯一方法是以临时名称写出整个文件的新副本,然后使用 rename 将其名称更改为旧名称。没有办法就地缩短文件。 (如果您在 Windows 上,您可能必须在 rename 之前使用旧名称 remove。)

POSIX 添加了ftruncate 操作,可用于使文件更短(或更长)到位。大多数常见的操作系统都支持 POSIX 功能,但 Windows 不支持。不过,根据您在 Windows 上使用的编译器,您可能仍然有一个名为 ftruncate 的函数,因为 Windows 上的 C 运行时经常试图伪造 POSIX 功能的子集——其中许多伪造品是不可靠的,但我承认我鉴于 Windows 本身确实有一个等效的原始操作,它只是有一个不同的名称 (SetEndOfFile),看不出怎么能搞砸ftruncate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2013-09-22
    相关资源
    最近更新 更多