[英]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.