You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
2.3 KiB
149 lines
2.3 KiB
/*
|
|
reads input data
|
|
Copyright (C) 1999 Martin Vogt
|
|
|
|
This program 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.
|
|
|
|
For more information look at the file COPYRIGHT in this package
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "fileInputStream.h"
|
|
|
|
#include <iostream>
|
|
|
|
using namespace std;
|
|
|
|
FileInputStream::FileInputStream() {
|
|
file=NULL;
|
|
lopen=false;
|
|
fileLen=0;
|
|
}
|
|
|
|
|
|
FileInputStream::~FileInputStream() {
|
|
close();
|
|
}
|
|
|
|
|
|
int FileInputStream::open(const char* dest) {
|
|
|
|
close();
|
|
if (dest == NULL) {
|
|
return false;
|
|
}
|
|
setUrl(dest);
|
|
if (strlen(dest) == 1) {
|
|
if (strncmp(dest,"-",1)==0) {
|
|
file=::fdopen(0,"rb");
|
|
}
|
|
}
|
|
// load out of current dir if no full path is given
|
|
if (file == NULL) {
|
|
file=fopen(dest,"rb");
|
|
}
|
|
fileLen=0;
|
|
if (file == NULL) {
|
|
cout <<"cannot open file:"<< dest<<endl;
|
|
|
|
} else {
|
|
lopen=true;
|
|
struct stat fileStat;
|
|
stat(dest,&fileStat);
|
|
fileLen=(long)fileStat.st_size;
|
|
}
|
|
int back=(file!=NULL);
|
|
return back;
|
|
}
|
|
|
|
|
|
void FileInputStream::close() {
|
|
if (isOpen()) {
|
|
::fclose(file);
|
|
file=NULL;
|
|
lopen=false;
|
|
}
|
|
}
|
|
|
|
|
|
int FileInputStream::isOpen() {
|
|
return lopen;
|
|
}
|
|
|
|
|
|
int FileInputStream::eof() {
|
|
if (isOpen()==false){
|
|
return true;
|
|
}
|
|
int back=true;
|
|
if (file != NULL) {
|
|
back=feof(file);
|
|
}
|
|
|
|
return back;
|
|
}
|
|
|
|
|
|
int FileInputStream::read(char* ptr,int size) {
|
|
int bytesRead=-1;
|
|
if (isOpen()) {
|
|
if (size <= 0) {
|
|
cout << "size is <= 0!"<<endl;
|
|
return 0;
|
|
}
|
|
if (file != NULL) {
|
|
bytesRead=fread(ptr,1,size,file);
|
|
}
|
|
} else {
|
|
cerr << "read on not open file want:"<<size<<endl;
|
|
return 0;
|
|
}
|
|
return bytesRead;
|
|
}
|
|
|
|
|
|
int FileInputStream::seek(long posInBytes) {
|
|
int back=true;
|
|
if (isOpen()==false) {
|
|
return false;
|
|
}
|
|
long pos=-1;
|
|
if (file != NULL) {
|
|
pos=fseek(file,posInBytes,SEEK_SET);
|
|
}
|
|
|
|
if (pos < 0) {
|
|
cout <<"seek error in FileInputStream::seek"<<endl;
|
|
back=false;
|
|
}
|
|
return back;
|
|
}
|
|
|
|
|
|
long FileInputStream::getByteLength() {
|
|
return fileLen;
|
|
}
|
|
|
|
|
|
long FileInputStream::getBytePosition() {
|
|
int back=0;
|
|
if (isOpen()) {
|
|
if (file != NULL) {
|
|
back=ftell(file);
|
|
}
|
|
}
|
|
return back;
|
|
}
|
|
|
|
|
|
|
|
void FileInputStream::print() {
|
|
printf("pos in file:%8x\n",(int)getBytePosition());
|
|
}
|
|
|
|
|