2014-04-23 83 views
1

以下是我遇到的代碼,我有一個.txt文件,其中包含使用此格式的用戶及其密碼列表:user;password。 我需要在文件中搜索用戶,然後刪除包含此用戶的行。在C++中使用istream/ofstream刪除txt文件中的特定行

void deleteauser() 
    { 
    string user; 
    cout<<"Which user do you wish to delete?"; 
    cin>>user; 
    string line; 
    string delimiter=";"; 
    string token,token1; 
    ifstream infile; 
    infile.open("users.txt",ios::in); 
    while (getline(infile,line,'\n')) 
    { 
     token = line.substr(0, line.find(delimiter)); 
     token1=line.substr(token.length(), line.find('\n')); 
     if(token==user) 
     { 
       //here i need to delete the line of the user that has been found 
     } 
    } 
    infile.close(); 
    } 

回答

3

讀取輸入文件,逐行寫入臨時文件。當你找到你不想要的行時,就不要將它們寫入臨時文件。完成後,將臨時文件重命名爲真實文件。

+1

這聽起來不夠低效嗎? – srph

+0

@srph這只是處理這種事情的最常見方法。另一種方法是將所有文件讀入內存,並寫出所需的數據,但如果文件很大或者您不知道它的大小,則需要更多的工作。 –

1

編輯文件,你有兩個選擇:

  1. 閱讀中的每一行,並寫出那些你想保持
  2. 尋求到要刪除的文件的一部分,空格替換文本(或類似的)

你已經完成了上半部分 - 只是寫出你讀到的臨時文件並刪除/重命名以使其成爲原始文件。

對於第二個選項,如果您使用iofstream(請注意緩衝問題),您可以在該位置寫入輸入文件。更好的選擇是在覆蓋文件之前使用seekp或seekg來達到正確的點。

相關問題