[英]How to delete an empty line from text file in C++?
我在大學學習編程已有一年左右的時間,並且在此過程中已經學到了一些東西,因此我決定制作自己的“主機編輯器”程序,該程序基本上可以編輯Windows主機文件,讓您插入,刪除和管理內部的網址。 :)
但是,嘗試從文件中刪除URL時遇到了問題。 我實際上不刪除它,因為我不知道如何做,但是我創建了一個新的空文本文件,然后復制除帶有要刪除的URL的行以外的所有行。 聽起來合理嗎?
但是,似乎必須刪除所謂的“空行” ,才能刪除URL。 至少不是我編碼的方式...我已經嘗試了一切,而且我真的需要您的幫助。
但是請在這里使用“菜鳥友好”的語言,我不會理解任何復雜的術語:)
謝謝,這是我的完整代碼:
http://joggingbenefits.net/hcode.txt
這只是我認為困擾我的部分代碼(刪除URL函數):
void del(int lin) // line index
{
FILE* fp=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts","r+");
FILE* fp1=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts1","w");
char str[200];
int cnt=0;
while(! feof(fp))
{
fgets(str,200,fp);
if(str[0]=='#')
{
fputs(str,fp1);
}
else
{
if(cnt==lin)
{ // problem. FLAG?!
cnt++;
}
else
{
cnt++;
fputs(str,fp1);
}
}
}
fclose(fp);
fclose(fp1);
rename("C:\\Windows\\System32\\drivers\\etc\\hosts","C:\\Windows\\System32\\drivers\\etc\\deleteme");
rename("C:\\Windows\\System32\\drivers\\etc\\hosts1","C:\\Windows\\System32\\drivers\\etc\\hosts");
remove("C:\\Windows\\System32\\drivers\\etc\\deleteme");
cout << endl << "LINE DELETED!" << endl;
}
由於已將其標記為C ++,因此我假設您要重寫它以消除C FILE
接口。
std::ifstream in_file("C:\\Windows\\System32\\drivers\\etc\\hosts");
std::ofstream out_file("C:\\Windows\\System32\\drivers\\etc\\hosts1");
std::string line;
while ( getline( in_file, line ) ) {
if ( ! line.empty() ) {
out_file << line << '\n';
}
}
非常簡單!
您沒有說過這段代碼是如何失敗的(或者以文本為例),但是我注意到您的循環存在問題。 “文件末尾”條件是由於嘗試讀取文件末尾的行為而引起的,但是您在fgets
之前進行了測試( feof
),因此您對最后一行進行了兩次操作:控件在輸入后進入循環讀取最后一行,嘗試-失敗-讀取另一行,對仍在str
的行進行操作,然后終止循環。
代替
while(! feof(fp))
{
fgets(str,200,fp))
...
嘗試:
while(fgets(str,200,fp))
{
...
fgets()
函數讀取包含尾隨行尾字符( '\\n'
)的行,而puts()
函數寫入傳遞給in的行和行尾字符。 所以如果你讀
this line
它存儲為
this line\\n
在str
。 並寫回為
this line\\n\\n
看起來像這樣
this line
在文件中。
fprintf(fp2, "%s", str);
fputs()
之前,請刪除str
尾隨"\\n"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.