簡體   English   中英

如何在C ++中讀取一個空文件?

[英]How do I read an empty file in C++?

如何在C ++中讀取一個空文件?

我使用什么while循環條件讀取空文件?

因為!fin.eof()條件不起作用並創建了一個無限循環。

我使用turbo c ++,我有2個文件。 音樂庫文件已經有一些專輯。 我需要過濾掉並刪除重復的相冊,然后將其添加到filterfile中。

我的代碼如下:

void albumfilter()
{
    song s;
    album a;

    ifstream fin;
    fstream finout;

    fin.open("Musiclibrary.txt", ios::binary);

    while(!fin.eof())
    {
        fin.read((char*)&s,sizeof(s));
        if(fin.eof())
        break;

        finout.open("Filteralbum.txt", ios::binary| ios::in| ios::out);

        while(!finout.eof())
        {
            finout.read((char*)&a, sizeof(a));

            if(strcmp(a.getfilter_albumname(), s.getalbum())!=0)
            {
                strcpy(a.getfilter_albumname(),s.getalbum());
                 finout.write((char*)&a, sizeof(a));
                finout.close();
            }
        }
    }

    fin.close();
}

此代碼正確嗎?

僅當嘗試讀取文件末尾時才設置eof() :您必須嘗試讀取至少一次。 std::basic_ios::eof

此函數僅報告最新I / O操作設置的流狀態,不檢查關聯的數據源。 例如,如果最新的I / O是get(),它返回了文件的最后一個字節,則eof()返回false。 下一個get()無法讀取任何內容並設置eofbit。 只有這樣eof()才返回true。

就像讀取非空文件一樣,您將讀取操作作為循環的條件。 該代碼應該是不言自明的:

std::vector<std::string> lines;
std::ifstream file("file.x");

if (file.is_open()) {

    while (std::getline(file, line)) {  // you can use operator>> here, too
        lines.push_back(line);
    }

    if (file.bad() || file.fail()) {
        std::cout << "An error occured during reading.";
    } else if (lines.empty()) {
        std::cout << "The file is empty.";
    }

} else {
    std::cout << "Couldn't open file.";
}

如果使用operator>>讀取不同於std::string的內容,則錯誤檢查的邏輯將更改-循環可能結束並且尚未設置eof。 (例如,如果您讀入int並且提取操作在過程中遇到非數字)。 您需要考慮到這一點。

       ifstream fin("empty-file.txt");
       string line;
       while(true){
            fin>>line;
            if(fin.eof())break;
       }

我認為應該這樣做。 但是,為什么要讀取一個空文件?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM