1

私の C++ プロジェクトでは、レコードを保存するために作成されたファイルのバックアップを作成するオプションを提供しました。これは、そのディレクトリにフォルダーを作成することにより、ユーザーが指定したパスにファイルのバックアップを作成します。同じコードは次のとおりです。

void backup()
{
 char a[40],c[40],b[40];
 product p1;
 clrscr();
 ifstream fp1("products.dat", ios::binary);
 ifstream fp2("purchase.dat",ios::binary);
 ifstream fp3("sales.dat",ios::binary);
 if(fp1==NULL || fp2==NULL || fp3==NULL)
 {
  cout<<"\n\tError-No or Incomplete Database...";
 }
 else
 {
  cout<<d_line;
  cout<<"\t\t\t       Database backup";
  cout<<"\n\t\t\t       -------- ------";
  cout<<line;
  cout<<"\n\tEnter the Directory in which you want to create backup:";
  gets(a);
  strcpy(b,a);
  strcpy(c,a);
  strcat(a,"/backup_b");
  strcat(b,"/backup_b");
  strcat(c,"/backup_b");
  mkdir(a);
  strcat(a,"/products.dat");
  strcat(b,"/purchase.dat");
  strcat(c,"/sales.dat");
  ofstream fp1_t(a, ios::binary | ios::trunc);
  ofstream fp2_t(b, ios::binary | ios::trunc);
  ofstream fp3_t(c, ios::binary | ios::trunc);

  if(fp1_t==NULL || fp2_t==NULL ||fp3_t==NULL)
  {
   cout<<"\n\n\tError During creating backup...\n";
  }
  else
  {
   while(!fp1.eof())
   {
    fp1.read((char *) &p1,sizeof(struct product));
    if(fp1.fail())
    {
     break;
    }
    else
    {
     fp1_t.write((char *) &p1,sizeof(struct product));
    }
   }
   while(!fp2.eof())
   {
    fp2.read((char *) &p1,sizeof(struct product));
    if(fp2.fail())
    {
     break;
    }
    else
    {
     fp2_t.write((char *) &p1,sizeof(struct product));
    }
   }
   while(!fp3.eof())
   {
    fp3.read((char *) &p1,sizeof(struct product));
    if(fp3.fail())
    {
     break;
    }
    else
    {
     fp3_t.write((char *) &p1,sizeof(struct product));
    }
   }
   fp1_t.close();
   fp2_t.close();
   fp3_t.close();
  }
  fp1.close();
  fp2.close();
  fp3.close();
  cout<<line;
  cout<<"\n\tBackup Created Successfully...";
 }
 cout<<line<<conti;
 getch();
}

知りたいのですが、C++ でフォルダーを作成するより効率的な方法はありますか?

4

3 に答える 3

2

確かに、これを行うプラットフォームに依存しない方法と、よりタイプセーフな方法があります。boost filesystem を試してください。

于 2012-06-27T14:28:44.820 に答える
0

Windowsを使用している場合CreateDirectoryは、が最も簡単なオプションです。次に例を示します。

#include "Windows.h"
...
    CreateDirectory("C:\\temp\\sampledir", NULL);
...

これはWindowsAPIの一部であり、ここに記載されています:CreateDirectory関数のMSDNエントリ

于 2012-06-27T14:02:42.990 に答える