本文整理汇总了C++中Directory::findName方法的典型用法代码示例。如果您正苦于以下问题:C++ Directory::findName方法的具体用法?C++ Directory::findName怎么用?C++ Directory::findName使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Directory
的用法示例。
在下文中一共展示了Directory::findName方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Dir_Unlink
void DirectoryManager::Dir_Unlink(char* direc)
{
/*
direc이 나타내는 디렉토리를 삭제.
해당 디렉토리를 포함하는 상위 디렉토리에서도 관련 내용 삭제
data block, inode도 삭제, 관련 bitmap도 0으로 설정
디렉토리에 파일이 존재하면 에러 메시지 출력
루트 디렉토리는 삭제 불가
*/
Directory dr = Dir_Read(direc);
if (dr.entryCnt == 2)
{
int topInodeNum = dr.findName("..")->inodeNum;
int currInodeNum = dr.findName(".")->inodeNum;
// 아이노드 번호가 시스템파일 테이블에 없으면 파일 Unlink과정을 한다
// 속하는 상위 디렉토리의 엔트리에 해당 파일과 아이노드번호 삭제
Directory d = *returnDir(topInodeNum);
d.rmDirectory(currInodeNum, topInodeNum);
FileSystem& fs = *FileSystem::getInstance();
// InodeBitmap의 해당 비트 0으로 set
// BlockBitmap의 dataIdx 에 해당하는 비트 0으로 set
// InodeBlock에서 아이노드 번호에 해당하는 아이노드 삭제
Inode inodeData = fs.inodeBlock->getInodeData(currInodeNum);
int blocks = atoi(inodeData.blocks);
int* dataIdx = new int[blocks];
translateCharArrToIntArr(inodeData.dataBlockList, dataIdx, blocks);
fs.resetDataBlock(dataIdx, blocks);
fs.writeFS(currInodeNum);
}
else
throw "디렉토리가 비어있지 않습니다.";
}
示例2: openFile
int File::openFile(char* file, TableManager& tm)//, FileSystem& fs )
{
FileSystem* f = FileSystem::getInstance();
FileSystem& fs = *f;
PathManager* p = PathManager::getInstance();
PathManager& pm = *p;
int fd = 0;
// InodeTable���� ���� ���丮�� ������ �� idx �ƿ�
vector<string>* pathFiles = pm.getAllAbsPath(file);// ������ ���ʷ� ��������
DirectoryManager dm = DirectoryManager::getTmpInstance();
Directory dir = dm.Dir_Read(stringToCharArr((*pathFiles)[pathFiles->size() - 2]));
// ������ �����ͺ� �о��
Entry* dirFileEntry = dir.findName(stringToCharArr((*pathFiles)[pathFiles->size() - 1]));
if (dirFileEntry == nullptr)
{
cout << endl << "�ش� ���丮�� ������ ����." << endl;
fd = -1;
return fd;
}
int inodeNo = dirFileEntry->inodeNum;
Inode inode = fs.readFS(inodeNo);
/* (FS) InodeBlock���� inodeNo��° �о� �� */
if (tm.isExistInInodeTable(inodeNo))
{
cout << endl << "open�Ǿ��ִ� �Լ���" << endl;
return fd;// fd = 0 -> �̹� ���µǾ��ִ� ���
}
fd = tm.fileOpenEvent(inodeNo, inode);
/*
InodeTable�� �о�� inode���� ����->�ý����������̺�->���ϵ�ũ���� ������
InodeBlocks���� ������ ���̳�� ������ �о� ���̳�� ���̺��� �ε��� n�� ����
�ý��� ���� ���̺��� �ε��� k�� ���� ������ ����
inode��ȣ�� �ε���n�� �����ϰ� ���� �����ʹ� 0���� �ʱ�ȭ
���� ��ũ���� ���̺��� �ε��� j �� �ý��� ���� ���̺��� �ε��� k ����
��� j ����
*/
return fd; //���� ��ũ���� ��ȯ
} // openFile
示例3: isFile
char DirectoryManager::isFile(char* filename, Directory currentDir)
{
if (strcmp(filename, "/") == 0)
{
return 'd';
}
Entry* fileEntry = currentDir.findName(filename);
if (fileEntry == NULL) {
throw "파일이 존재하지 않습니다.";
}
Directory* dir = returnDir(fileEntry->inodeNum);
if (dir == NULL)
return 'f';
return 'd';
}
示例4: findFile
int File::findFile(char* file) // ����� Ȥ�� ������
{
PathManager* p = PathManager::getInstance();
PathManager& pm = *p;
FileSystem* f = FileSystem::getInstance();
FileSystem& fs = *f;
char* absFile = pm.getAbsolutePath(file);
TableManager tmpTM = TableManager::getTmpInstance();
vector<string>* pathFiles = pm.getAllAbsPath(file);// ������ ���ʷ� ��������
int count = pathFiles->size();
int *fd = new int[count];
for (int i = 0; i < count - 1; i++)
{
fd[i] = openFile(stringToCharArr((*pathFiles)[i]), tmpTM);
}
InodeElement* dirInode = (InodeElement*)tmpTM.getElement(INODET, fd[count - 2]);
DirectoryManager dm = DirectoryManager::getTmpInstance();
Directory* dir = dm.returnDir(dirInode->inode_number);
Entry* fileEntry = dir->findName(file);
if (fileEntry == nullptr)
{
string path = pm.getCurrentPath() + '/';
string filename = file;
path = path + filename;
createFile((char*)path.c_str());
}
TableManager* t = TableManager::getInstance();
TableManager& tm = *t;
return openFile(file, tm);
}
示例5: openAllDir
void DirectoryManager::openAllDir(char * path)
{
FileSystem& fs = *FileSystem::getInstance();
TableManager& tm = *TableManager::getInstance();
PathManager& pm = *PathManager::getInstance();
vector<string> vStr = *pm.getAllAbsPath(path);
vector<string> vAllDirec = pm.doAnalyzeFolder(path);
Directory dir = *returnDir(0); // root의 dir 객체 가져오기
int fd = tm.fileOpenEvent(0, fs.inodeBlock->getInodeData(0));
openedDir_FDList.push_back(fd);
for (int i = 1; i < vStr.size(); i++)
{
// 상위 디렉토리를 통해 먼저 inodeNum과 Block을 얻는다.
Entry* en = dir.findName(stringToCharArr(vAllDirec[i]));
if (!en) {
cout << "Name : " << vAllDirec[i] << endl;
throw "dir의 엔트리에서 name을 찾지 못함.";
}
int inodeNum = en->inodeNum;
Inode inodeBl = fs.inodeBlock->getInodeData(inodeNum);
dir = Dir_Read(stringToCharArr(vStr[i]));
if (tm.isExistInInodeTable(inodeNum))
{
cout << endl << "open되어있는 디렉토리임" << endl;
throw "error in DirectoryManager.cpp in allOpen Func";// fd = 0 -> 이미 오픈되어있는 경우
}
fd = tm.fileOpenEvent(inodeNum, inodeBl);
openedDir_FDList.push_back(fd);
openedDirList.push_back(dir);
}
}
示例6: findFile
Entry* File::findFile( char* filename, int* dirInodeNo ) // ������
{
FileSystem& fs = *FileSystem::getInstance();
PathManager& pm = *PathManager::getInstance();
TableManager& tm = *TableManager::getInstance();
DirectoryManager& dm = *DirectoryManager::getInstance();
vector<string> filenames = pm.doAnalyzeFolder( filename );
vector<string>& pathFiles = *pm.getAllAbsPath( filename );
Entry* fileEntry;
//int count = pathFiles.size();
vector<string>::size_type count = pathFiles.size();
// Ÿ������ ������ �����θ� ���� ���丮�� ã�� ���̳�� ��ȣ�� ����
*dirInodeNo = dm.returnInodeNum( (char*) pathFiles.at( count -2 ).c_str() );
// ���丮�� ���̳�� ��ȣ�� ���� ���丮�� �ƿ�
Directory* dir = dm.returnDir( *dirInodeNo );
fileEntry = dir->findName( (char*)filenames[ filenames.size()-1].c_str() ); // ���丮���� ���Ͽ�Ʈ���� ã��
//delete dir;
return fileEntry; // ��� ��� nullptr
}