Crie um diretório se ele não existir

No meu aplicativo eu quero copiar um arquivo para o outro disco rígido, então este é o meu código:

#include  using namespace std; int main(int argc, char* argv[] ) { string Input = "C:\\Emploi NAm.docx"; string CopiedFile = "Emploi NAm.docx"; string OutputFolder = "D:\\test"; CopyFile(Input.c_str(), string(OutputFolder+CopiedFile).c_str(), TRUE); return 0; } 

então depois de executar isso, ele me mostra no D: HDD um arquivo testEmploi NAm.docx mas eu quero que ele crie a pasta de teste se ela não existir.

Eu quero fazer isso sem usar a biblioteca Boost.

Use a function WINAPI CreateDirectory() para criar uma pasta.

Você pode usar essa function sem verificar se o diretório já existe, pois ele falhará, mas GetLastError() retornará ERROR_ALREADY_EXISTS :

 if (CreateDirectory(OutputFolder.c_str(), NULL) || ERROR_ALREADY_EXISTS == GetLastError()) { // CopyFile(...) } else { // Failed to create directory. } 

O código para construir o arquivo de destino está incorreto:

 string(OutputFolder+CopiedFile).c_str() 

isso produziria "D:\testEmploi Nam.docx" : há um separador de caminho ausente entre o diretório e o nome do arquivo. Exemplo de correção:

 string(OutputFolder+"\\"+CopiedFile).c_str() 

Provavelmente a maneira mais fácil e eficiente é usar boost e as funções boost :: filesystem. Dessa forma, você pode criar um diretório simplesmente e garantir que ele seja independente da plataforma.

 const char* path = _filePath.c_str(); boost::filesystem::path dir(path); if(boost::filesystem::create_directory(dir)) { std::cerr< < "Directory Created: "<<_filePath< 

boost :: filesystem :: create_directory - documentação

Aqui está a maneira simples de criar uma pasta …….

 #include  #include  void CreateFolder(const char * path) { if(!CreateDirectory(path ,NULL)) { return; } } CreateFolder("C:\\folder_name\\") 

Este código acima funciona bem para mim.

 #include  // or #include  namespace fs = std::experimental::filesystem; if (!fs::is_directory("src") || !fs::exists("src")) { // Check if src folder exists fs::create_directory("src"); // create src folder } 

_mkdir também fará o trabalho.

 _mkdir("D:\\test"); 

https://msdn.microsoft.com/pt-br/library/2fkk4dzw.aspx

Use CreateDirectory (char *DirName, SECURITY_ATTRIBUTES Attribs);

Se a function for bem sucedida, ela retorna um valor diferente de zero, caso contrário, NULL .

Você pode usar o cstdlib

Embora- http://www.cplusplus.com/articles/j3wTURfi/

 #include  const int dir= system("mkdir -p foo"); if (dir< 0) { return; } 

você também pode verificar se o diretório já existe usando

 #include