En mi aplicación que desea copiar un archivo a otro disco duro, así que este es mi código:

 #include <windows.h>

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 la ejecución de este, que me muestra en el D:HDD un archivo testEmploi NAm.docx
pero yo lo quiero para crear la carpeta de prueba si no existe.

Quiero hacer eso sin usar el Impulso de la biblioteca.

InformationsquelleAutor pourjour | 2012-02-10

8 Comentarios

  1. 66

    El uso de la WINAPI CreateDirectory() función para crear una carpeta.

    Puede utilizar esta función sin comprobar si el directorio ya existe, como se van a fallar, pero GetLastError() volverá 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 incorrecta:

    string(OutputFolder+CopiedFile).c_str()

    esto produciría "D:\testEmploi Nam.docx": hay una falta separador de ruta entre el directorio y el nombre del archivo. Ejemplo de solución:

    string(OutputFolder+"\"+CopiedFile).c_str()
    • gracias por la rápida respuesta, ¿cómo puedo mezclar con el CopyFile miembro
    • Antes de llamar a la CopyFile() llamada CreateDirectory() para crear OutputFolder.
    • gracias funciona bien
    • Hace esta función obtiene «ERROR_ALREADY_EXISTS» si la ruta de acceso es sólo «C:\» ? Gracias
    • Para aquellos que llegan el error argument of type "const char *" is incompatible with parameter of type "LPCWSTR".
    • Pequeña advertencia: CreateDirectory también devuelve si lpPathName puntos existentes en un archivo así, uno podría erróneamente suponer que se trata de un directorio, y en este caso la CopyFile llamado que probablemente no
    • Hay un problema con esta solución creo yo, porque es necesario incluir el de windows.h biblioteca que tiene una gran cantidad de macros que hacen caso omiso de alcance. Esto puede hacer que sea totalmente incompatible con otras bibliotecas.

  2. 32

    Probablemente el más fácil y la manera más eficiente es usar el boost y el boost::sistema de ficheros funciones. De esta manera usted puede construir un directorio, simplemente, y asegúrese de que es 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<<std::endl;
    }

    boost::sistema de archivos::create_directory – documentación

    • Que los encabezados de qué es necesario para utilizar aquí?
    • Para los Empleados como yo, #include <boost/filesystem.hpp> También, de paso -lboost_filesystem -lboost_system para el vinculador
  3. 20
    #include <experimental/filesystem> //or #include <filesystem>
    
    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
    }
    • Sólo es necesario compilar con -lstdc++fs
    • La lógica es errónea si «src» apunta a un archivo en lugar de un directorio, se debe agregar una llamada a is_directory (o lo que se llama)
    • Fija! 😉
  4. 18

    Aquí es la forma más sencilla para crear una carpeta…….

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

    Este código anterior funciona bien para mí.

    • Gracias por incluir el .h archivo de referencia, que para nosotros los novatos es difícil de determinar.
    • Hay un problema con esta solución creo yo, porque el windows.h biblioteca tiene una gran cantidad de macros que hacen caso omiso de alcance. Esto puede hacer que sea totalmente incompatible con otras bibliotecas.
  5. 2

    OpenCV Específicos

    Opencv admite el sistema de archivos, probablemente a través de su dependencia de Impulso.

    #include <opencv2/core/utils/filesystem.hpp>
    cv::utils::fs::createDirectory(outputDir);
    • P. S. – Esta respuesta ayuda en su mayoría estudiantes y/o investigadores que trabajan en el equipo de proyectos de visión, pero no es necesario Impulsar específicamente.

Dejar respuesta

Please enter your comment!
Please enter your name here