Avatar billede montago Praktikant
03. august 2006 - 23:41 Der er 9 kommentarer og
2 løsninger

Problem ved oprettelse af mapper / String 2 Char

Jeg bruger følgende funktion til at konvertere en mappe-sti til char:

char *stoc( string stringtekst )
{   
    int length = stringtekst.length(), i;
    char *chartekst = (char *)malloc(length);

    for( i=0; i<length; i++ )
        chartekst[ i ] = stringtekst[ i ];

    chartekst[ i+1 ] = '\0';

    return chartekst;
}

Og følgende function til at oprette en sti af mapper, med deres undermapper:

void CreateDir(char* Path)
{
    char DirName[256];
    char* p = Path;
    char* q = DirName;   

    while(*p)
    {
        if (('\\' == *p) || ('/' == *p))
        {
            if (':' != *(p-1))
            {
                CreateDirectory(DirName, NULL);
            }
        }
        *q++ = *p++;
        *q = '\0';
    }
    CreateDirectory(DirName, NULL);
}


Når Jeg fx har

string str_path = "mappe\\undermappe\\mappe"
CreateDir( stoc ( str_path ) );


Mit problem er imidlertidigt at der går noget galt et sted :(
mapperne bliver oprettet, men den sidste mappe i stien, får tilføjet et mystisk 'Y' tegn ??

jeg har på fornemelsen at det er NULL tegnet i Char arrayet som er skyldner, men kan ikke selv finde problemet
Avatar billede montago Praktikant
03. august 2006 - 23:42 #1
Det skal lige siges at CreateDir("mappe\\undermappe\\mappe") virker perfekt
Avatar billede arne_v Ekspert
03. august 2006 - 23:48 #2
jeg tror at din stoc kan erstattes af den indbyggede c_str metode på string !
Avatar billede arne_v Ekspert
03. august 2006 - 23:49 #3
CreateDir( str_path.c_str() );
Avatar billede montago Praktikant
03. august 2006 - 23:50 #4
dvs

c_str(string) ??
Avatar billede montago Praktikant
03. august 2006 - 23:50 #5
prøver
Avatar billede montago Praktikant
03. august 2006 - 23:51 #6
cannot convert parameter 1 from 'const char *' to 'char *'
Avatar billede arne_v Ekspert
03. august 2006 - 23:54 #7
CreateDir( (char *)str_path.c_str() );

CreateDir vil næppe ændre den
Avatar billede arne_v Ekspert
03. august 2006 - 23:55 #8
eller nok pænere

ret til

void CreateDir(const char* Path)
Avatar billede montago Praktikant
03. august 2006 - 23:55 #9
void CreateDir(const char* Path)
{
    char DirName[256];
    const char* p = Path;
    char* q = DirName;   

    while(*p)
    {
        if (('\\' == *p) || ('/' == *p))
        {
            if (':' != *(p-1))
            {
                CreateDirectory(DirName, NULL);
            }
        }
        *q++ = *p++;
        *q = '\0';
    }
    CreateDirectory(DirName, NULL);
}

CreateDir( str.c_str() );

Sådan... vupti
Avatar billede montago Praktikant
03. august 2006 - 23:56 #10
nåmen - smid et svar... selvom mit eget er løsningen :P
Avatar billede arne_v Ekspert
04. august 2006 - 00:06 #11
svar
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