#include "TSystem.h" #include "Riostream.h" #include #include "ttextfile.h" ClassImp(TTextFile) //______________________________________________________________________________ TTextFile::TTextFile() : TNamed() {} //______________________________________________________________________________ TTextFile::TTextFile(const Char_t* fileName) : TNamed() { TString fN(fileName), dN("."); if (fN.Contains("/")) { dN = fN(0, fN.Last('/')); fN = fN(fN.Last('/') + 1, fN.Length()); } TSystemFile* f = new TSystemFile(fN.Data(), dN.Data()); SetFile(f); delete f; } //______________________________________________________________________________ TTextFile::TTextFile(TSystemFile* file) : TNamed() { SetFile(file); } //______________________________________________________________________________ TTextFile::TTextFile(const Char_t* fileName, const Char_t* name, const Char_t* title) : TNamed(name, title) { TString fN(fileName), dN("."); if (fN.Contains("/")) { dN = fN(0, fN.Last('/')); fN = fN(fN.Last('/') + 1, fN.Length()); } TSystemFile* f = new TSystemFile(fN.Data(), dN.Data()); SetFile(f); delete f; } //______________________________________________________________________________ TTextFile::TTextFile(TSystemFile* file, const Char_t* name, const Char_t* title) : TNamed(name, title) { SetFile(file); } //______________________________________________________________________________ TTextFile::TTextFile(const TTextFile& ttf) : TNamed(ttf) { SetFile(ttf.fFileName.Data()); } //______________________________________________________________________________ TTextFile::~TTextFile() {} //______________________________________________________________________________ void TTextFile::SetFile(const Char_t* fileName) { TString fN(fileName), dN("."); if (fN.Contains("/")) { dN = fN(0, fN.Last('/')); fN = fN(fN.Last('/') + 1, fN.Length()); } TSystemFile* f = new TSystemFile(fN.Data(), dN.Data()); SetFile(f); delete f; } //______________________________________________________________________________ void TTextFile::SetFile(TSystemFile* file) { Char_t* path = Form("%s/%s", file->GetTitle(), file->GetName()); Long_t id, size, flags, modtime; if (gSystem->GetPathInfo(path, &id, &size, &flags, &modtime)) { Error("SetFile", "File is not accessible!"); return; } if ((flags & 2) > 0) { Error("SetFile", "Provided File is a directory!"); return; } fFileName = path; fFileContent = ""; fSaveTime.Set(); fModificationTime.Set(modtime); ifstream in; in.open(path); std::string line; while (!in.eof()) { std::getline(in, line); fFileContent += line.c_str(); fFileContent += "\n"; } in.close(); } //______________________________________________________________________________ Int_t TTextFile::Merge(TCollection* tc) { TIter files(tc); while (TObject* obj = files()) { TTextFile* f = dynamic_cast(obj); if (f == 0) continue; if (fFileName.CompareTo(f->GetFileName()) != 0) { Error("Merge", "Only Files of same Name can be merged!"); continue; } if (fModificationTime.Get() < f->GetTimeFileModified().Get()) { fFileContent = f->GetFileContent(); fModificationTime = f->GetTimeFileModified(); fSaveTime = f->GetTimeFileSaved(); } } return 1; }