C++倒序读取文件内容

需求:需要对系统日志进行监控,获取增量日志

获取文件最后一行内容

// 获取上一行行尾位置
int MovetoLineStart(std::fstream* fs) {
    fs->seekg(-1, std::ios_base::cur);
    for (int i = fs->tellg(); i > 0; i--) {
        if (fs->peek() == '\n') {
            fs->get();
            return i;
        }
        fs->seekg(i, std::ios_base::beg);
    }
    return -1;
}

// 获取文件最后一行
std::string GetLastLine(std::fstream* fs) {
    // Go to the last character before EOF
    fs->seekg(-1, std::ios_base::end);
    if (MovetoLineStart(fs) < 0) {
        fs->close();
        return "";
    }
    std::string lastline = "";
    getline(*fs, lastline);
    fs->close();
    return lastline;
}

int main() {
    std::fstream fs("/var/log/syslog", std::ios::in);
    std::cout << GetLastLine(&fs) << "\n";
}

文件从后向前读取10行

void GetLinesReverse(std::fstream* fs) {
    // Go to the last character before EOF
    fs->seekg(-1, std::ios_base::end);
    int pos = MovetoLineStart(fs);
    int count = 10;
    std::string lastline = "";
    while (pos > 0) {
        if (count <= 0) {
            return;
        }
        getline(*fs, lastline);
        std::cout << lastline << "\n";
        fs->seekg(pos);
        pos = MovetoLineStart(fs);
        --count;
    }
}

int main() {
    std::fstream fs("/var/log/syslog", std::ios::in);
    GetLinesReverse(&fs);
}
posted @ 2023-08-16 19:15  umichan  阅读(149)  评论(0编辑  收藏  举报