簡體   English   中英

為什么一次刪除和重命名一次不起作用?

[英]Why does Remove and Rename once working once not?

我想從用作“數據庫”的文件中刪除一行。 為此,我將期望該行的所有內容復制到一個新文件中,然后刪除舊文件並重命名新文件。 我知道這可能不是最好的解決方案,但這不是重點。 問題是,我用 2 個文件執行此操作,它不適用於第一個文件,但可以完美地與第二個文件一起使用。 我不知道是什么導致了這個問題。 (問題是第一次刪除和重命名什么都不做,並且返回 -1 是錯誤代碼。)

這是代碼:

#define defaultBuilds "build.txt"
#define defaultAnswers "answers.txt"

FILE* fop = fopen(defaultAnswers, "r"); //forrasfile
    FILE* fdp = fopen("temp_a.txt", "w"); //ideiglenes cel file

    //bejegyzesek masolasa
    char buff[buffSize];
    int ind;
    for(int i = 0; i < lines; i++)
    {
        fgets(buff, buffSize, fop);
        if(i != sor) //kiveve a torlendo bejegyzest
            fprintf(fdp, "%s", buff);
        else if(i == sor)
        {
            //tolendo bejegyzeshez tartozo index meghatarozasa
            int end, start;
            for(end = 0; buff[end] != 0; end++);
            for(start = end; buff[start] != ' '; start--);
            char temp[50];
            for(int j = ++start, k = 0; j < end; j++, k++)
                temp[k] = buff[j];
            sscanf(temp, "%d", &ind);
        }
    }

    fclose(fop);
    fclose(fdp);

    remove(defaultAnswers); //regi torlese
    rename("temp_a.txt", defaultAnswers); //uj atnevezese


    fop = fopen(defaultBuilds, "r");
    fdp = fopen("temp_b.txt", "w");

    //szamitogepek masolasa
    int temp;
    for(int i = 0; i < lines; i++)
    {
        fscanf(fop, "%d\n", &temp);
        if(temp != ind) //torlendo kihagyasa
            fprintf(fdp, "%d\n", temp);
        for(int j = 0; j < defaultAmountOfParts; j++)
        {
            fgets(buff, buffSize, fop);
            if(temp != ind)
            {
                if(j == 0)
                    fprintf(fdp, "\t");
                fprintf(fdp, "%s", buff);
            }
        }
    }
    fclose(fop);
    fclose(fdp);

    remove(defaultBuilds);  //torles
    rename("temp_b.txt", defaultBuilds); //atnevezes

哦,這是文件夾結構: 文件夾結構

我可能會以一種丑陋的方式解決問題,但如果我能使用這種方法,我會非常高興,它更簡單。

編輯:我發現 remove() 有錯誤: Permission denied ,我不知道為什么會發生。 我檢查了, fclose 成功關閉了文件。

我想從用作“數據庫”的文件中刪除一行。 為此,我將期望該行的所有內容復制到一個新文件中,然后刪除舊文件並重命名新文件。 我知道這可能不是最好的解決方案,但這不是重點。 問題是,我用 2 個文件執行此操作,它不適用於第一個文件,但可以完美地與第二個文件一起使用。 我不知道是什么導致了這個問題。 (問題是第一次刪除和重命名什么都不做,並且返回 -1 是錯誤代碼。)

這是代碼:

#define defaultBuilds "build.txt"
#define defaultAnswers "answers.txt"

FILE* fop = fopen(defaultAnswers, "r"); //forrasfile
    FILE* fdp = fopen("temp_a.txt", "w"); //ideiglenes cel file

    //bejegyzesek masolasa
    char buff[buffSize];
    int ind;
    for(int i = 0; i < lines; i++)
    {
        fgets(buff, buffSize, fop);
        if(i != sor) //kiveve a torlendo bejegyzest
            fprintf(fdp, "%s", buff);
        else if(i == sor)
        {
            //tolendo bejegyzeshez tartozo index meghatarozasa
            int end, start;
            for(end = 0; buff[end] != 0; end++);
            for(start = end; buff[start] != ' '; start--);
            char temp[50];
            for(int j = ++start, k = 0; j < end; j++, k++)
                temp[k] = buff[j];
            sscanf(temp, "%d", &ind);
        }
    }

    fclose(fop);
    fclose(fdp);

    remove(defaultAnswers); //regi torlese
    rename("temp_a.txt", defaultAnswers); //uj atnevezese


    fop = fopen(defaultBuilds, "r");
    fdp = fopen("temp_b.txt", "w");

    //szamitogepek masolasa
    int temp;
    for(int i = 0; i < lines; i++)
    {
        fscanf(fop, "%d\n", &temp);
        if(temp != ind) //torlendo kihagyasa
            fprintf(fdp, "%d\n", temp);
        for(int j = 0; j < defaultAmountOfParts; j++)
        {
            fgets(buff, buffSize, fop);
            if(temp != ind)
            {
                if(j == 0)
                    fprintf(fdp, "\t");
                fprintf(fdp, "%s", buff);
            }
        }
    }
    fclose(fop);
    fclose(fdp);

    remove(defaultBuilds);  //torles
    rename("temp_b.txt", defaultBuilds); //atnevezes

哦,這是文件夾結構: 文件夾結構

我可能會以一種丑陋的方式解決問題,但如果我能使用這種方法,我會非常高興,它更簡單。

編輯:我發現 remove() 有錯誤: Permission denied ,我不知道為什么會發生。 我檢查了, fclose 成功關閉了文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM