2013-11-09 11 views
0

Я пытаюсь создать файл в новом каталоге, но сначала получаю путь к каталогу, а затем имя файла, но когда я пытаюсь создать каталог с именем файла, fail, потому что я не могу добавить обе переменные в mkdir mkdir (direccionarchivo, '/', nombrearchivo);Добавить переменную char в переменную char

#include <iostream> 
#include <fstream> 
#include <io.h> // For access(). 
#include <sys/types.h> // For stat(). 
#include <sys/stat.h> // For stat(). 
#include <string> 

using namespace std; 

int main() { 
    char respuesta,salida,direccionarchivo[100],nombrearchivo[100]; 
    salida = 'e'; 
    do 
    { 
    cout << "Escoja donde desea crear el archivo de notas" << endl; 
    cout << "Recuerde poner todo el directorio donde desea que se cree el archivo." << endl; 
    cout << "Ejemplo: C:\\Users\\omartinr\\Desktop" << endl; 
    cin >> direccionarchivo; 
    if (access(direccionarchivo, 0) == 0) 
    { 
     struct stat status; 
     stat(direccionarchivo, &status); 

     if (status.st_mode & S_IFDIR) 
     { 
     cout << "El directorio si existe" << endl; 
     } 
     else 
     { 
     cout << "Esta direccion es un archivo" << endl; 
     } 
    } 
    else 
    { 
     cout << "La direccion escrita no existe" << endl; 
     cout << "Desea que sea creada?(S/N)" << endl; 
     cin >> respuesta; 
     if (respuesta == 's' || respuesta == 'S') 
     { 
      salida = 'f'; 
     } 
    } 
    }while(salida == 'e'); 
    cout << "Escriba el nombre del archivo con su tipo" << endl; 
    cout << "Ejemplo: notas.txt" << endl; 
    cin >> nombrearchivo; 
    mkdir (direccionarchivo,'/',nombrearchivo); 

    return 0; 
} 
+3

Что точная ошибка? И что именно вы пытаетесь сделать? Кроме того, кодирование на английском языке (даже если пользовательский интерфейс находится на другом языке) будет чрезвычайно полезным для вас в долгосрочной перспективе. StackOverflow проще понять вашу программу, и это поможет вам, вероятно, в карьере ... – nhgrif

+0

Если вы использовали std :: string, вы могли бы найти большую часть этой (и менее подверженной ошибкам) ​​команды. –

ответ

0

При использовании mkdir необходимо учитывать несколько вещей. Сначала он не может использоваться для создания более одного каталога в пути к каталогу. Итак, mkdir("/tmp/blah/foo"), не удастся, если каталоги tmp и blah еще не существуют. Нижеприведенная программа является примером создания каждого каталога по пути, если он не существует. Также вы не хотите использовать mkdir для создания имени файла, поскольку он будет создан как каталог, а не файл. вам нужно будет использовать open() или fopen() для создания/открытия файла. В Linux человек страниц для MKDIR описывают два параметра:

NAME 
    mkdir -- make a directory file 

SYNOPSIS 
    #include <sys/stat.h> 

    int mkdir(const char *path, mode_t mode); 

DESCRIPTION 
    The directory path is created with the access permissions specified by 
    mode and restricted by the umask(2) of the calling process. See chmod(2) 
    for the possible permission bit masks for mode. 

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/stat.h> 

int main (int argc, const char * argv[]) 
{ 
    const char *path = "/tmp/blah/foo/bar/"; 
    char bpath[1024]; 
    sprintf(bpath, "%s", path); 
    printf("creating path %s\n", bpath); 
    char *s = bpath; 
    int scnt = 0; 
    int first = 1; 
    while (*s) { 
     if (*s == '/') { 
      if (scnt == 0 && first) { 
       /* skip root */ 
      } else { 
       /* terminate partial path */ 
       *s = '\0'; 
       /* The behavior of mkdir is undefined for anything other than the "permission" bits */ 
       struct stat sbuf; 
       if (stat(bpath, &sbuf) == -1) { 
        printf("creating sub path %s\n", bpath); 
        if (mkdir(bpath, 0777)) { 
         perror(bpath); 
         return -1; 
        } 
       } else { 
        printf("existing sub path %s\n", bpath); 
       } 
       /* restore partial path */ 
       *s = '/'; 
      } 
     } 
     /* advance to next char in the directory path */ 
     first = 0; 
     ++s; 
     ++scnt; 
    } 
    return 0; 
} 

Вот выход из этой программы:

creating path /tmp/blah/foo/bar/ 
existing sub path /tmp 
existing sub path /tmp/blah 
creating sub path /tmp/blah/foo 
creating sub path /tmp/blah/foo/bar 
0

Если вы хотите, чтобы сцепить (то есть объединение) две строки вы можете использовать функцию strcat. Сначала вы должны создать каталог, а затем файл внутри него. Вы не можете напрямую создать файл в несуществующей директории. Из командной строки его можно использовать mkdir -p

Также вы уверены, что вы вызываете функцию mkdir? Страница руководства дает следующий прототип: int mkdir(const char *path, mode_t mode);

Смежные вопросы