Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453

    [C] stat() : No such file or directory

    ciao a tutti...

    mi serve ricavare la dimensione di un file non noto a priori (noto a runtime). Quando arrivo a dover ricavare tale dimensione, confeziono una stringa (in memoria dinamica, con una serie di strcpy e strcat) del tipo "dirA/dirB/file_che_voglio.tar.tgz", dopo di che lo passo alla funzione stat().

    Il problema è che fallisce sempre, analizzando errno ottengo "No such file or directory". Eppure se stampo la stringa il percorso è corretto, e se sostituisco manualmente la stringa che ottengo nella stat(), tra doppi apici funziona. Sospetto perciò che sia la stringa che ha qualcosa che non va... se però stampata viene bene... cosa puo' essere? cosa puo' dar noia alla stat()? magari non vuole caratteri di terminazione? boh?!

    vi ringrazio..

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Probabilmente fai degli errori quando formi la stringa ... facci vedere come fai.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    è probabile (ste stringhe C mi stanno facendo dannare, mi ero abituato alla comodità di "string" di C++ ), però come mai allora viene stampata per bene? Che errori potrei aver fatto?

    comunque vediamo un po':
    codice:
    int un_intero;
    char * buff;
    char altra_stringa[1024], altra_stringa2[25], n[7];
    //...
    strcpy(altra_stringa, "valore_uno\0");
    
    strcpy(altra_stringa2, "valore_due\0");
    sprintf(n, "%i", un_intero);
    n[6] = '\0';
    strcat(altra_stringa2, n);
    
    //...
    
    buff = malloc(strlen(...)+...); // alloco spazio per le stringhe che dovrò concatenarci, sovradimensionando un po'
    
    if(buff == NULL) /* errore allocazione*/;
    
    // confeziono in buff una stringa, che mi serve per un'altra cosa. Lo riporto perchè ho paura che sia per questi rigiri vari che faccio su buff che qualcosa va storto...
    // buff è una var che uso diverse volte anche in altri punti della funzione per operazioni su stringhe e con la memoria dinamica)
    strcpy(buff,"stringa1 \0");
    strcat(buff, altra_stringa);
    strcat(buff, "stringa2\0");
    // <uso la stringa così costruita>
    
    // ora voglio riusare buff per costruire la stringa che da problemi
    
    strcpy(buff, altra_stringa_2);
    strcat(buff, "/\0");
    strcat(buff, altra_stringa);
    strcat(buff, "valore_3\0");
    
    printf("%s \n", buff); // stampata correttamente
    ret = stat(buff, &info); // ritorna -1, errno: No Such File or Directory
    
    free(buff);
    (scusate per questa ignobile porcheria)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mi spieghi questa

    buff = malloc(temp = malloc(strlen(...)+...);

    ?

    E perchè tutti quei

    \0

    all'interno delle stringhe?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    no scusa, questo (buff = malloc(temp = malloc(strlen(...)+...); ) è un'errore di copiatura

    è: buff = malloc(strlen(...)+....);

    Gli /0 li mettevo per esser sicuro di terminare tutte le stringhe... non ci vanno? possono esser quelli che danno noia?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Certo che non ci vanno ...

    Ma, a parte questo, cosa vorresti fare con tutto questo codice?

    Perchè non usi una sola sprintf (o la sua versione sicura) per formare il nome del file ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    ehm.. perchè non la conoscevo e non l'avevo mai usata.. lì c'è solo per fare la conversione da intero a stringa, l'ho trovato in giro... Come si usa la sprintf per concatenare un po' di stringhe?

    ps: ma comunque il problema nell'altro metodo, pessimo finchè si vuole, dove sarebbe? Se uso sprintf() faccio prima ma non penso risolverei il problema...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Kilin
    ehm.. perchè non la conoscevo e non l'avevo mai usata.. lì c'è solo per fare la conversione da intero a stringa, l'ho trovato in giro... Come si usa la sprintf per concatenare un po' di stringhe?

    ps: ma comunque il problema nell'altro metodo, pessimo finchè si vuole, dove sarebbe? Se uso sprintf() faccio prima ma non penso risolverei il problema...
    Non mi hai risposto su cosa vuoi fare esattamente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    credevo fosse una domanda del tipo "ma cosa usi tutti quel codice che c'è la sprintf!", che non richiedeva risposta :-p

    niente comunque, quelle stringhe così create mi servono a diverse cose... è un'applicazione client server, in cui ci si scambiano dei files tra le due parti. I nomi dei files non sono noti a priori, così come la dimensione delle stringhe che li rappresentano. Anche il path dove salvarli dipende da un indice... così ogni volta che devo fare una scrittura di uno di questi files, o una successiva lettura, puo' capitare di dover confezionare una stringa a partire da alcune variabili (nome_file, timestamp...). Poi su questi files devo chiamare dei comandi con delle system(), quindi un'altra cosa che mi trovo a dover fare è confezionare comandi, mettendo insieme parti fisse (es: "tar -czvf") e parti variabili (path del file, nome desiderato dell'archivio...)

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Cercavo una risposta più "schematica", per darti un aiuto immediato senza esaminare e correggere il codice ... in pratica ti chiedevo

    1) devi formare un nome di file completo a partire da alcuni dati?

    2) i dati in questione sono in alcune variabili? alcuni sono costanti?

    3) ad esempio, vorresti formare un percorso del tipo

    cartella1/cartella2/file

    a partire da dati posti in alcune variabili?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.