📄 nfile.h
字号:
#ifndef Nfile_tag
#define Nfile_tag
#include <vector>
#include <string>
#include <iostream>
#define INDEXFILE 1
#define COMMONFILE 2
class Index_File;
class Nfile//文件类
{
protected:
DiNode *inode;//指向idode
std::string filename;
Index_File *parent;
public:
Nfile(std::string fname,DiNode *ide,Index_File *par)
{
filename=fname;
inode=ide;
parent=par;
}
void open()
{
inode->open();
}
std::string getName()
{
return filename;
}
int getUid()
{
return inode->getUid();
}
int getType()
{
return inode->getType();
}
DiNode *getInode()
{
return inode;
}
int dellink()
{
return inode->dellink();
}
std::string read()//读出显示文件内容
{
inode->reset();
std::string str;
HDblock *ptem=getInode()->getAddr();
for(int i=0;;i++)
{
if(ptem->isFull())
{
if(!ptem->hasNext())
{
break;
}
ptem=ptem->getpNext();
}
char ch=ptem->readChar();
if(ch<0)
{
return str;
}
else
{
str+=ch;
}
}
return str;
}
int write(std::string str)//向文件中写str
{
HDblock *ptem=getInode()->getAddr();
for(int i=0;i<str.length();i++)
{
if(ptem->isFull())
{
if(!ptem->hasNext())
{
//p->next=hd0.getFreeBlock();
//hd0;
}
ptem=ptem->getpNext();
}
ptem->write(str[i]);
}
return 1;
}
void setParent(Index_File*par)
{
parent=par;
}
Index_File*getParent()
{
return parent;
}
~Nfile()
{
delete inode;
}
};
typedef Nfile Index_Record;
/////////////////////////////////////////////////////
class Index_File:public Nfile
{
private:
std::vector<Index_Record*> records;
public:
Index_File(std::string filename,HDblock*blk,int uid,Index_File *par):Nfile(filename,new DiNode(INDEXFILE,blk,uid),par)
{
parent=par;
}
Index_File(std::string filename,DiNode *ide,Index_File *par):Nfile(filename,ide,par)
{
parent=par;
}
Index_File*getParent()
{
return parent;
}
void setParent(Index_File*par)
{
parent=par;
}
void addFile(Nfile* file)
{
if(file->getType()==INDEXFILE)
{
file->setParent(this);
}
records.push_back(file);
}
void removeFile(Nfile*file)
{
if(file->dellink()==0)
{
for(std::vector<Nfile*>::iterator it=records.begin();it!=records.end();it++)
{
if( (*it)->getName()
== file->getName() )
{
records.erase(it);
break;
}
}
}
}
Nfile*getByName(std::string nm)
{
for(std::vector<Index_Record*>::iterator it=records.begin();it!=records.end();it++)
{
if(((*it)->getName())==nm)
{
return *it;
}
}
return NULL;
}
void listAllFile(std::string format="")
{
if(format.length()==0)//无参数
{
for(std::vector<Index_Record*>::iterator it=records.begin();it!=records.end();it++)
{
if((*it)->getType()==INDEXFILE)
{
std::cout<<"DIR===";
}
else
{
std::cout<<"COM===";
}
std::cout<<(*it)->getName()<<std::endl;
}
}
}
Index_File*cd(std::string nm)
{
if(nm=="..")
{
return parent ;
}
if(nm==".")
{
return this;
}
Nfile*ptem=NULL;
if(ptem=getByName(nm))
{
if(ptem->getType()==INDEXFILE)
{
return (Index_File*)ptem;
}
else
{
//Exception("can not cd to a common file .");
return NULL;
}
}
return NULL;
}
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -