⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileinputstream.cpp

📁 clucene是c++版的全文检索引擎,完全移植于lucene,采用 stl 编写.
💻 CPP
字号:
/*------------------------------------------------------------------------------* Copyright (C) 2003-2006 Jos van den Oever* * Distributable under the terms of either the Apache License (Version 2.0) or * the GNU Lesser General Public License, as specified in the COPYING file.------------------------------------------------------------------------------*//* This file is part of Strigi Desktop Search * * Copyright (C) 2006 Jos van den Oever <jos@vandenoever.info> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB.  If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */#include "jstreamsconfig.h"#include "fileinputstream.h"#include <cerrno>#include <cstring>using namespace jstreams;const int32_t FileInputStream::defaultBufferSize = 1048576;FileInputStream::FileInputStream(const char *filepath, int32_t buffersize) {    // try to open the file for reading    file = fopen(filepath, "rb");    this->filepath = filepath;    if (file == 0) {        // handle error        error = "Could not read file '";        error += filepath;        error += "': ";        error += strerror(errno);        status = Error;        return;    }    // determine file size. if the stream is not seekable, the size will be -1    fseek(file, 0, SEEK_END);    size = ftell(file);    fseek(file, 0, SEEK_SET);    // if the file has size 0, make sure that it's really empty    // this is useful for filesystems like /proc that report files as size 0    // for files that do contain content    if (size == 0) {        char dummy[1];        size_t n = fread(dummy, 1, 1, file);        if (n == 1) {            size = -1;            fseek(file, 0, SEEK_SET);        } else {            fclose(file);            file = 0;            return;        }    }    // allocate memory in the buffer    int32_t bufsize = (size <= buffersize) ?size+1 :buffersize;    mark(bufsize);}FileInputStream::~FileInputStream() {    if (file) {        if (fclose(file)) {            // handle error            error = "Could not close file '" + filepath + "'.";        }    }}int32_tFileInputStream::fillBuffer(char* start, int32_t space) {    if (file == 0) return -1;    // read into the buffer    int32_t nwritten = fread(start, 1, space, file);    // check the file stream status    if (ferror(file)) {        error = "Could not read from file '" + filepath + "'.";        fclose(file);        file = 0;        status = Error;        return -1;    }    if (feof(file)) {        fclose(file);        file = 0;    }    return nwritten;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -