Avatar billede stringbuffer Nybegynder
19. december 2001 - 12:26 Der er 4 kommentarer og
2 løsninger

oprette fil ud fra en sti (linux)

Kan man på simpel måde oprette og åbne en fil, når man får opgivet en sti, og ikke alle mapper i denne sti findes i forvejen?

Svar med kode :)
Avatar billede soepro Nybegynder
19. december 2001 - 13:52 #1
Simpel måde: nej, for de enkelte mapper i stien skal oprettes separat en ad gangen - startende med toppen.

Du kan gøre noget i stil med:

FILE* createFilePath(char *filePath, char* mode)
{
  char  tmpPath[MAXPATH];
  char *ptrChar;
  int  len    = 0;
  FILE* tmpFile = NULL;

  fnsplit(filePath, /* no dir */, tmpPath, /* no file */ NULL, /* no ext. */ NULL);
  ptrChar = strtok(tmpPath, \"\\\\\\r\\n\");
  while (ptrChar != NULL)
  {
    len += strlen(ptrChar);
    // Ensure that current \"sub-path\" is infact a
    // sub-path => next character after current string must be
    // a backslash.
    if (filePath[len] == \'\\\\\' && !chdir(ptrChar)
      mkdir(ptrChar);
  };
  tmpFile = fopen(filePath, mode);
  return tmpFile;
}

Som du selvfølgelig bør forfine med skift af drev, gem af nuv. path osv.
Avatar billede stringbuffer Nybegynder
19. december 2001 - 15:34 #2
Linux har da ikke fnsplit???
Avatar billede stringbuffer Nybegynder
19. december 2001 - 16:39 #3
Jeg har denne her, den ser ud til at virke:

#include <stdio.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>


FILE * open_from_path(const char* path, const char* mode, const char* basedir=NULL)
{
    int i = 0;
    char filename[512];
    const char * pPath = path;
    if (basedir != NULL)
    {
    strcpy(filename, basedir);
    i += strlen(basedir);
    if (filename[i-1] == \'/\')
        i--;
    }

    while (*pPath > 0x20)
    {
    // Move to next slash
    for (; *pPath > 0x20 && *pPath != \'/\'; pPath++, i++)
        filename[i] = *pPath;

    filename[i] = *pPath;

    // End of path
    if (*pPath != \'/\')
        break;

    i++;
    pPath++;
    filename[i] = 0;
    if (mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH) == -1)
    {
        if (errno != EEXIST)
        return NULL;
    }
    }
    return fopen(filename, mode);
}
Avatar billede stringbuffer Nybegynder
19. december 2001 - 16:43 #4
Nå ja, det sidste skulle have været et svar...
Avatar billede stringbuffer Nybegynder
19. december 2001 - 16:43 #5
Venter lidt endnu, måske findes der nogle mere geniale forslag.
Avatar billede stringbuffer Nybegynder
21. december 2001 - 14:32 #6
Lukker nu da ingen viser interesse...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester