En mi aplicación, quiero copiar un archivo al otro disco duro, así que este es mi 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; }
así que después de ejecutar esto, me muestra en el D:
HDD un archivo testEmploi NAm.docx
pero quiero que cree la carpeta de prueba si no existe.
Quiero hacer eso sin usar la biblioteca de Boost.
Use la función WINAPI CreateDirectory()
para crear una carpeta.
Puede usar esta función sin verificar si el directorio ya existe, ya que fallará, pero GetLastError()
devolverá ERROR_ALREADY_EXISTS
:
if (CreateDirectory(OutputFolder.c_str(), NULL) || ERROR_ALREADY_EXISTS == GetLastError()) { // CopyFile(...) } else { // Failed to create directory. }
El código para construir el archivo de destino es incorrecto:
string(OutputFolder+CopiedFile).c_str()
esto produciría "D:\testEmploi Nam.docx"
: falta un separador de ruta entre el directorio y el nombre del archivo. Arreglo de ejemplo:
string(OutputFolder+"\\"+CopiedFile).c_str()
Probablemente la forma más fácil y eficiente es usar boost y las funciones boost :: filesystem. De esta forma, puedes construir un directorio de forma sencilla y asegurarte de que sea independiente de la 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 - documentación
Aquí está la manera simple de crear una carpeta …….
#include #include void CreateFolder(const char * path) { if(!CreateDirectory(path ,NULL)) { return; } } CreateFolder("C:\\folder_name\\")
Este código anterior funciona bien para mí.
#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
también hará el trabajo.
_mkdir("D:\\test");
Use CreateDirectory (char *DirName, SECURITY_ATTRIBUTES Attribs);
Si la función tiene éxito, devuelve un valor distinto de cero, de lo contrario NULL
.
Puedes usar cstdlib
Aunque- http://www.cplusplus.com/articles/j3wTURfi/
#include const int dir= system("mkdir -p foo"); if (dir< 0) { return; }
también puedes verificar si el directorio ya existe usando
#include