2011-06-10 22 views
2

你好,我的問題是爲什麼下面的函數無法刪除名稱在dir1中指定的文件; 我使用刪除功能,但它似乎有某種問題。 請幫幫我。使用函數從stdio.h中刪除(..)的問題C++

#include <stdio.h> 
void test(char* dir1,char* dir2) 
{ 

    FILE * file1,* file2; 
    file1=fopen(dir1,"r"); 
    file2=fopen(dir2,"w"); 
    if(!file1){ return;} 
    int inpch; 
    char* string = new char[10]; 
    string[9]='\0'; 
    int br=0; 

    do 
    { 

     while((inpch=fgetc(file1))!=EOF) 
     { 
      string[br]=char(inpch); 
      br++; 
      if(br==9)break; 
     } 


     if(br!=9) 
     { 
      string[br]='\0'; 
      fputs(string,file2); 


      return; 
     } 
     else 
     { 
      fputs(string,file2); 
      br=0; 

     } 


    }while(true); 

    fclose(file1); 
    remove(dir1);/// I DON"T UNDERSTAND WHY IT DOESN"T DELETE THE FILE. 
    fclose(file2); 
} 
+1

你(而不是程序)是否有適當的權限來刪除文件? – 2011-06-10 17:27:52

+0

@Michael:'unlink'有14個錯誤情況,''remove'正在調用'rmdir'系統調用13個。我們是否會在一個或另一個案例中詢問OP 17次的確切性? :) – 2011-06-10 17:30:04

+0

@Vlad:不。只有一個。 :) – 2011-06-10 17:44:08

回答

0

與此更換您的通話remove

if(remove("myfile.txt") != 0) 
    perror("Error deleting file"); 
    else 
    puts("File successfully deleted"); 

,它會告訴你發生了什麼。

2

爲什麼不檢查返回值和錯誤代碼(errno),告訴你爲什麼函數沒有成功?

4

我想在某個時候退出do-while循環之前,以下if條件爲真,並達到該函數結束前,甚至沒有調用remove函數的函數返回。

if(br!=9) 
    { 
     string[br]='\0'; 
     fputs(string,file2); 
     return; //<------------ here you're returning! 
    } 

你想寫returnbreak?看起來像問題所在。

+3

你有一隻鷹眼,男人。如果他幸運的話,他應該打破第9個字節壽) – 2011-06-10 17:31:40