Crear un sistema de archivos en C++

Mi proyecto consiste en eso tengo que crear una disque version de los sistemas de archivos
Ntfs y ext2, pero mi problema es que no logro abstraer como dentro de un archivo poder crear mas archivos y como crear las estructuras dentro de un archivo como lo son el superbloque, los inodos, en ext2 y en ntfs seria el arbol b, el mbr y las demas estructuras espero me puedan ayudar y

1 Respuesta

Respuesta
1
Ummm, OK, bueno, supongo que tendras que modelar un tree structure:
#include <string>
#include
<list>
class CNode
{
public:
CNode( const std::string & strName ) :
m_strName( strName )
{
}
virtual ~CNode()
{
}
public:
const std::string Name( void ) const
{
}
private:
const std::string m_strName;
};
class CFile : public Cnode
{
public:
CFile( const std::string & strName ) :
CNode( strName )
{
}
virtual ~CFile()
{
}
};
class CDirectory: public CNode
{
public:
CDirectory( const std::string & strName ) :
CNode( strName )
{
}
virtual ~CDirectory()
{
std::list< CNode * >::const_iterator iterator;
for ( iterator = m_lstChildren.begin(); iterator < m_lstChildren.end(); iterator++ )
{
CNode * pNode = ( * iterator );
delete pNode;
}
}
public:
virtual void Add( CNode * pChild )
{
if ( pChild != ( CNode * )0 )
{
m_lstChildren.Add( pChild );
}
}
private:
std::list< CNode * > m_lstChildren;
};
Suponiendo que puedes usar STL (uso string y list), esta infraestrucura ya te dara pistas para implementar lo que quieres ...
Para crearlo, has algo asi (ejemplo):
// Create root node
CDirectory * pRoot = new CDirectory( "" );
// Create 2 child directory nodes
CDirectory * pDirectory1 = new CDirectory( "a" );
CDirectory * pDirectory2 = new CDirectory( "b" );
// Add a file to "a" and "b" node
pDirectory1->Add( new CFile( "file1.txt" ) );
pDirectory2->Add( new CFile( "file2.txt" ) );
// Add a directory to "a" node
pDirectory1->Add( new CDirectory( "c" ) );
// Add nodes to root
pRoot->Add( pDirectory1 );
pRoot->Add( pDirectory2 );
Yata. Si creas un metodo abstracto a la clase CNode (ejemplo Print), pues implementarla como toque en CFile y CDirectory.
void CFile::Print( void )
{
printf( "", Name() );
}
void CDirectory::Print( void )
{
// Print own name
printf( "", Name() );
// Iterate through children, calling each one
std::list< CNode * >::const_iterator iterator;
for ( iterator = m_lstChildren.begin(); iterator < m_lstChildren.end(); iterator++ )
{
CNode * pNode = ( * iterator );
pNode->Print();
}
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas