2012-09-14 48 views
1

我需要在文件中的每行末尾添加一個文本。我有以下代碼:在一個文件純行代碼中的行尾添加文本

FILE *tmp_copy = tmpfile(); 
file = fopen (argv[2], "rw");  
if ((file != NULL)) { 
    char line [ 128 ]; /* or other suitable maximum line size */ 
    while((fgets (line, sizeof line, file) != NULL)) { 
     fputs(line, tmp_copy); 
    } 
    fclose (file); 

     rewind(tmp); 
     char *p; 
     /* Reopen file now with write permissions */ 
     fopen(argv[2], "w"); 
     while ((p = fgets(line, 1024, tmp))!=NULL) { 
      //line[strlen(line)-1] = '\0'; /* Clear away newline */ 
      //sprintf(line, "%s %s\n", line, more); 
      strcpy(line,"true"); 
      //fputs(line, file); 
     } 
fclose(file); 
fclose(tmp); 
      } 

} 

我編輯了我的代碼。仍然不能正常工作 但它不工作。爲什麼?

+0

_這是不是「不工作」? –

+0

http://forums.devshed.com/showpost.php?p=136468&postcount=5 –

回答

4

我猜你想要將行重新寫入文件。但是,您不是寫入文件,只是附加到內存中的數據。它也真的無法讀取,並在同一時間一樣,寫文件,你必須做的兩個步驟:

  1. 閱讀從原來的文件,追加想文本行,並寫入到臨時文件
  2. 重命名(或複印件)從臨時文件到原始文件

編輯:我的回答僞ISH代碼:

original_file = fopen(original_file_name, "r"); 
temporary_file_name = tmpnam("dummy"); 
temporary_file = fopen(temporary_file_name, "w"); 

while (fgets(line, original_file)) 
{ 
    remove_trailing_newline(line); 
    strcat(line, " TRUE\n"); 
    fputs(line, temporary_file); 
} 

fclose(temporary_file); 
fclose(original_file); 

rename(temporary_file_name, original_file_name); 
+0

你能寫一個代碼示例嗎? –

+0

我編輯了我的代碼。還是行不通。 –

+0

@justAngela請參閱我更新的答案,瞭解一些(僞)代碼。 –

0

除非文件是內存映射的,並且fgets返回一個指向原始緩衝區的指針(它不會。它需要追加null。)和strcat在適當的位置運行(它會),那麼你不會存儲任何東西,只會搞亂一些內存。即使它確實有效,無論如何你都會覆蓋下一行的一部分。 你需要或者

  • 寫入到一個臨時文件並重新命名您關閉原來的一個後(由約阿希姆Pileborg的建議)。
  • 寫入內存中的緩衝區並在完成讀取後將其保存到文件中。
  • 將文件一次讀入內存,然後逐行讀取緩衝區。
+0

你能寫一個基於我有什麼請求的代碼示例嗎? –

相關問題