Титульная страница   Иерархия классов   Алфавитный указатель   Классы   Файлы   Члены классов   Члены файла   Примеры  

DirTree.cpp

Пример использования классов Server, Volume, Volumes, Directory, Directories, Path, Exception. Данный пример демонстрирует простейшую программу, которая выводит на консоль дерево подкаталогов сервера, тома либо каталога.

#include <stdio.h>
#include <memory.h>
#include "BGDNet.h"

using BGDNet::Server;
using BGDNet::Volume;
using BGDNet::Volumes;
using BGDNet::Directory;
using BGDNet::Directories;
using BGDNet::Path;
using BGDNet::Exception;

void srvTree( const Server* pSrv );
void volTree( const Volume* pVol );
void dirTree( const Directory* pDir, int level = 0 );

int main( int argc, char* argv[] )
{
  if (argc < 2)
  {
    puts("Usage: DirTree.exe <server_name> [<volume_name> [<dir_path>]]");
    return -1;
  }

  try
  {
    Server srv(argv[1]);
    if (2 == argc)
      srvTree(&srv); // Выводим содержимое всего сервера
    else
    {
      Volume vol(&srv, argv[2]);
      if (3 == argc)
        volTree(&vol); // Выводим содержимое тома на сервере
      else
      {
        // Выводим содержимое каталога
        Directory dir(&vol, Path(argv[3], NW_NS_LONG));
        dirTree(&dir);
      }
    }
  }
  catch (const Exception& e)
  {
    printf("ERROR: %s\n", e.what());
  }
  puts("----------");

  return 0;
}

void srvTree( const Server* pSrv )
{
  printf("Server %s:\n", (const char*)pSrv->name());
  puts("---------------");
  Volumes vlms;
  pSrv->getVolumes(&vlms);
  for (int i = 0; i < vlms.size(); ++i)
    volTree(vlms[i]);
}

void volTree( const Volume* pVol )
{
  printf(" Volume %s:\n", (const char*)pVol->name());
  puts(" ---------------");
  dirTree(pVol->root(), 2);
}

void dirTree( const Directory* pDir, int level )
{
  const int MAX_LEVEL = 50;
  if (level < MAX_LEVEL)
  {
    char buf[MAX_LEVEL + 1];
    memset(buf, ' ', level);
    buf[level] = '\0';
    Directories dirs;
    pDir->getSubdirs(&dirs);
    for (int i = 0; i < dirs.size(); ++i)
    {
      const Directory* pSubDir = dirs[i];
      printf("%s%s\n", buf, (const char*)pSubDir->name());
      dirTree(pSubDir, level + 1);
    }
  }
}

РУП БЕЛГИПРОДОР Документация на BGDNet сгенерирована Mon Apr 1 18:36:52 2002, БЕЛГИПРОДОР ©  2001