Alternative zu stat()/lstat() bei Zugriff auf Windows-mount gesucht

12/04/2011 - 09:58 von Edzard Egberts | Report spam
Funktioniert nicht, ich weiß auch warum, aber was tun?

const char* Pfad= "/mnt/pc_windows/Daten/VZ_1/*";
glob_t ergeb;
int flags= 0;
glob(Pfad, flags, globfehler, &ergeb);
if (ergeb.gl_pathc > 0)
{ // Pfad wurde gefunden oder Wildcards konnten aufgelöst werden
struct stat Datei_Info;
for (unsigned i= 0; i < ergeb.gl_pathc; ++i)
{
if (lstat(ergeb.gl_pathv[i], &Datei_Info) <0)
continue;

An dieser Stelle erhalte ich den Fehler errno= 75:
"[EOVERFLOW] The file size in bytes or the number of blocks allocated to
the file or the file serial number cannot be represented correctly in
the structure pointed to by buf."

Das liegt IMHO daran, dass es sich um Windows-Dateiinformationen
handelt, denn ansonsten geht das. Mein Code geht so weiter:

else if (S_ISDIR(Datei_Info.st_mode) && Dir)
{ // Datei ist Directory und Directories werden gesucht
[...]
}
else if (S_ISREG(Datei_Info.st_mode) && !Dir)
{ // Datei ist regulàre Datei und regulàre Dateien
// werden gesucht
[...]
}
}

Kennt hier jemand eine Alternative, mit der ich herausfinden kann, ob es
sich bei dem Eintrag um ein Verzeichnis, oder eine Datei handelt?
 

Lesen sie die antworten

#1 Matthias Andree
14/04/2011 - 13:37 | Warnen spam
Am 12.04.2011 09:58, schrieb Edzard Egberts:
Funktioniert nicht, ich weiß auch warum, aber was tun?

const char* Pfad= "/mnt/pc_windows/Daten/VZ_1/*";
glob_t ergeb;
int flags= 0;
glob(Pfad, flags, globfehler, &ergeb);
if (ergeb.gl_pathc > 0)
{ // Pfad wurde gefunden oder Wildcards konnten aufgelöst werden
struct stat Datei_Info;
for (unsigned i= 0; i < ergeb.gl_pathc; ++i)
{
if (lstat(ergeb.gl_pathv[i], &Datei_Info) <0)
continue;

An dieser Stelle erhalte ich den Fehler errno= 75:
"[EOVERFLOW] The file size in bytes or the number of blocks allocated to
the file or the file serial number cannot be represented correctly in
the structure pointed to by buf."

Das liegt IMHO daran, dass es sich um Windows-Dateiinformationen
handelt, denn ansonsten geht das. Mein Code geht so weiter:

else if (S_ISDIR(Datei_Info.st_mode) && Dir)
{ // Datei ist Directory und Directories werden gesucht
[...]
}
else if (S_ISREG(Datei_Info.st_mode) && !Dir)
{ // Datei ist regulàre Datei und regulàre Dateien
// werden gesucht
[...]
}
}

Kennt hier jemand eine Alternative, mit der ich herausfinden kann, ob es
sich bei dem Eintrag um ein Verzeichnis, oder eine Datei handelt?



Compilierst Du in 32- oder 64-Bit-Umgebung? In ersterem Fall: benutzt
Du large file support? Vielleicht ist das nicht der Fall, aber Du
solltest es tun.

Für Linux wàre beispielsweise das hier interessant (unter Using LFS):
http://www.suse.de/~aj/linux_lfs.html, nebst Verweisen auf die
libc-Dokumentation. Ähnliches für Solaris z. B. auf
http://www.sun.com/software/whitepa...files.pdf.

Ähnliche fragen