Newsgroup: it.comp.lang.c
Titolo: CHDIR

Per cercare un file nel computer e 'lavorarci',ho creato un programmino
molto semplice anche se non completo e qui sorge il problema:
una volta trovato il file ,mi sposto nella sua directory tramite CHDIR.
Se il file si trova ad esempio in c:\programmi\altro,CHDIR non funziona
perchè nel dos, il percorso viene visto ad esempio come c:\progra~1\altro e
viene restituito errore di percorso non trovato.
Come posso fare? esistono altri modi meno "ingegnosi" per cercare un file?
Grazie ,Marco.
/*  FINDFILE.C by Marco  */
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<dir.h>
main()
{FILE *fp,*fp1;
unsigned char v[90],ss[80]="irectory di",ris[40], a=0,i=0,*loc;
int c=0;
system("cls");
system("cd\\");
system("dir vbrun300.dll/s>mk7.txt");
fp=fopen("mk7.txt","r");
system("cls");
while(!feof(fp))
{
   while((c!=10)&&(!feof(fp)))
    {c=fgetc(fp);
     v[a++]=c;
     }
    loc=strstr(v,ss);
   if(loc!=NULL)
   {loc=strstr(v,":");
    printf("%d %d",loc-v,a);
    c=0;
    for(i=(loc-v)-1;i<a-1;i++)
    ris[c++]=v[i];
    ris[c]='\0';
   for (i=0;i<c;i++)
    printf("%c",ris[i]);
        break;
   }
c=0;
a=0;
}
printf("\n");
       fclose(fp);
remove("mk7.txt");
chdir(ris);
printf("\n%s..............\n",ris);
if (c!=0)
   {perror("er");
     printf("%d",errno);
     printf(" %d ",c);
     exit(1);
     }
}

system("dir vbrun300.dll/s>mk7.txt");
Secondo me stai facendo un grosso errore in quanto usi abbondantemente
i comandi del DOS. Non pensi sarebbe meglio usare le funzioni C
findfirst() e findnext() ? (o le equivalenti fornite dal tuo
compilatore in quanto quelle che ho menzionato io non sono standard)
ciao

 Come posso fare? esistono altri modi meno "ingegnosi" per cercare un file?
Per gestire i nomi lunghi ti devi per forza di cose rivolgere alle API
di sistema, nel tuo caso la SetCurrentDirectory().
EMG

sarei ben felice se tu potessi aiutarmi con queste funzioni(magari qualche
sorgente)
grazie by marco

(magari qualche sorgente)
Penso che mandare qualche sorgente con il problema gia' risolto non
sarebbe molto istruttivo. Qui sotto ti riporto l'esempio del Borland
Turbo C++ 3.0 sull'uso delle due funzioni in oggetto e, partendo da
questo puoi benissimo arrivare a fare quello che vuoi tu.
Se vuoi che il programma vada a cercare il file anche in altre
directory devi, ogni volta che con la findnext trovi una directory,
memorizzarla in una lista. Appena completata l'elaborazione della
directory corrente andrai a prendere la directory successiva dalla
lista creata precedente e vai avanti cosi' (sempre aggiungendo alla
lista le nuove directory che incontri per strada) fino a quando la
lista non e' vuota.
Come vedi non e' solo un problema di findfirst e di findnext ma
bisogna anche sapersi muovere un po' con le malloc e con le liste.
Se vuoi ne possiamo anche parlare in e-mail.
ciao
 /* findfirst and findnext example */
 #include <stdio.h>
 #include <dir.h>
 int main(void)
 {
    struct ffblk ffblk;
    int done;
    printf("Directory listing of *.*\n");
    done = findfirst("*.*",&ffblk,0);
    while (!done)
    {
       printf("  %s\n", ffblk.ff_name);
       done = findnext(&ffblk);
    }
    return 0;
 }

 wrote in message
38669741...@flashnet.it...

Scusa  ma cosa sono la api del sistema?sai darmi una visiona chiara anche
del loro utilizzo?
ciao

 del loro utilizzo?
Non è questo il newsgroup adatto. Rivolgiti a it.comp.programmare.win32.
EMG