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

好吧,当然还有更多独立于平台的方法,以及更多类型安全的方法。尝试提升文件系统

于 2012-06-27T14:28:44.820 回答
0

如果您使用的是 Windows,那么CreateDirectory是最简单的选择。这是一个例子:

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

它是 Windows API 的一部分,记录在这里:MSDN entry for CreateDirectory function

于 2012-06-27T14:02:42.990 回答
0

我总是使用以下函数来创建文件夹。我使用它是因为,一方面,我不想使用任何 3rd-party 库,例如boost; 同时,仅仅调用 WIN32 APICreateDirectory()是不够聪明的,它可以让我们创建一个目录,但它只有在父目录已经存在时才有效。这个功能克服了这个限制。例如,它可以test通过传入'./subfolder/test'来创建一个文件夹,即使文件夹subfolder不存在。此外,如果文件夹已经存在,则不受影响,但如果不存在,则创建它。

void create_directory(char* Path)
{
    char DirName[256];
    char* p = Path;
    char* q = DirName;  

    while(*p)
    {
        if (('\\' == *p) || ('/' == *p))
        {
            if (':' != *(p-1))
            {
                CreateDirectory(DirName, NULL);
            }
        }
        *q++ = *p++;
        *q = '\0';
    }
    CreateDirectory(DirName, NULL);
}
于 2013-12-24T15:38:23.017 回答