Problem mit Dateiattributen

  • Themenstarter Themenstarter Blackvirus
  • Beginndatum Beginndatum
B

Blackvirus

Hi!

Ich möchte alle dateien eines bestimmten typs aus ordnern und unterordnern auslesen u. desen "daten" (pfad, typ, ...) in eine eigenen struktur schreiben.

Da ich auch alle dateien aus den unterordner haben möchte, muss ich mit dateiattributen arbeiten u. dort habe ich ein Problem!

Ordner prüfe ich mit "attribut.st_mode & S_IFREG", wobei S_IFREG bei "zutreffen" 1 zurückliefern sollte, was es aber nicht tut, sonder es liefert etwas um die 30000 zurück!
Auch attribut.st_mode hat glaub ich auch den falschen wert, nämlich 0.

Woran kann das liegen, lese ich falsch aus oder ist es was anderes?

Hier das Prog:

Code:
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "FileSearch.h"
int FileSearch(FILES *searchfiles, char sPath[], char sFileType[], int iSubdirectory);
int CmpType(char sFileName[], char sFileType[]);
int main()
{
   DIR *dir;
   struct dirent *dirzeiger;
   char sPath[30];
   FILES *files;
   
   printf("Pfad: ");
   gets(sPath);
   
   FileSearch(files, sPath, "mp3", 0); 
   
   while(files->next != NULL)
	  {
	  printf("Datei: %s\n",files->sFileName);
	  files = files->next;
	  }	
   
   fflush(stdin);
   getch();
   return 0;
}

int FileSearch(FILES *searchfiles, char sPath[], char sFileType[], int iSubdirectory)
	{
	DIR *dir;
	struct dirent *directory;
	struct stat attribut;
	char sPathTmp[30];
	int FileSearchReV = 0;
	int number=1;
	
	dir = opendir(sPath);
	
	
	while(((directory=readdir(dir)) != NULL) /*&& FileSearchReV == 0*/)
		{
		stat(directory->d_name, &attribut);
		
		printf("%i - %i\n",S_IFREG, attribut.st_mode);
			
		if((attribut.st_mode & S_IFREG))
			{
			strcpy(searchfiles->sFileName,directory->d_name);
			strcpy(searchfiles->sPath,sPath);
			strcpy(searchfiles->sFileType,sFileType);
			searchfiles->next = malloc(sizeof(FILES));
			searchfiles = searchfiles->next; 
			searchfiles->next = NULL;
			}		
		else if((attribut.st_mode & S_IFDIR) && iSubdirectory == 1 && (directory->d_name != ".." && directory->d_name != "."))
			{	   
			FileSearchReV = FileSearch(searchfiles, sPath, sFileType, iSubdirectory);
			}		
		}	
		
	if(closedir(dir) == -1)
		FileSearchReV = 1;
	
	return FileSearchReV;
	}

Und noch die Definition von der struktur FILES:

Code:
typedef struct FILEINFORMATION
	{
	char sFileName[20];				 // Name of the file, which has been found
	char sPath[50];					 // Path of the file, which has been found
	char sFileType[4];				  // Type of the file, which has been found
	struct FILES *next;				 // Pointer of the next file
	}FILES;

Vielen Dank für die Hilfe im Voraus

MfG

Blackvirus :)
 
Hallo, mach es so:

Code:
                stat(directory->d_name, &attribut);
                if(S_ISREG(attribut.st_mode))                                                                                              
                {
                        //is a regular file
                }                    
                else if(S_ISDIR(attribut.st_mode) && (strcmp(directory->d_name,"..") 
                                                        && strcmp(directory->d_name,".")))                                                 
                {                                    
                        //is a directory but not . and not .. 
                        //step in subdirectory recursivly 
                                     
                }

Gruß

RedWing
 
Zurück