From: Cirujano-Cuesta S. <Silvano.Cirujano-Cuesta@SiemensVDO.com> - 2003-10-01 13:17:21
|
Hello, I'm trying to read all the data of all the files of a directory and I'm having two different issues: - I use readdir to get the names of all the files. When end-of-directory is reached, readdir returns NULL (as expected) and errno==2! This is a more descriptive message using strerror(errno): "No such file or directory". Could anybody tell me what's happening? - I use read to get the data from the files, but it's doing something very strange. If I try to read a buffer smaller than the size of the file, it never reads fills the buffer up with data. For example, if BUFFER_SIZE == 10240, then iBytesRead == 1011 or 942 or even just 6. So, in the end only 10236 bytes of a file 13454 bytes big are read or, when reading a 1262349 bytes file I'm getting only 945 bytes! The code I'm using is in the end of the message. Thank you in advance for all your help. Silvano I'm using mingw 3.0.0-1 and running the application to read the data of a CD on a W-XP system. This is the code that is failing: /* open the directory */ pDirToCheck = opendir( strFilename ); if( pDirToCheck == NULL ) { printf( "ReadTree ERROR => %s\n", strerror( errno ) ); return ERROR; } /* read all the subdirectories of the directory */ errno = 0; while(( deFile = readdir( pDirToCheck )) != NULL ) { ... /* read data */ if(( iBytesRead = read( fd, buffer, BUFFER_SIZE )) == ERROR ) { printf( "ReadTree error %d: %s\n", errno, strerror( errno ) ); iAux = (int)close( fd ); return ERROR; } ... errno = 0; } /* END while(( deFile = readdir( pDirToCheck )) != NULL ) */ /* if error in readdir operation */ if( errno != 0 ) { printf( "ReadTree error %d: %s\n", errno, strerror( errno ) ); closedir( pDirToCheck ); return ERROR; } |