私の 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++ でフォルダーを作成するより効率的な方法はありますか?