2012-08-23 11 views
7

In Linux, wenn mit defekten Link-Dateien verwendet wird, schlägt es mit -1 fehl. Also habe ich lstat() verwendet, was erfolgreich war.Was ist lstat() Alternative in Windows?

Für den gleichen Fall in Windows, schlägt _stat() mit defekten Verknüpfungen, aber es gibt keine _lstat() in Windows. Bitte helfen Sie, die Alternative für lstat() in Windows zu finden.

Antwort

7

GetFileAttributes oder GetFileAttributesEx wahrscheinlich (wenn ich stat und lstat richtig verstanden habe). Zitat aus der Dokumentation:

Symbolisches Linkverhalten - Wenn der Pfad auf eine symbolische Verknüpfung verweist, gibt die Funktion Attribute für die symbolische Verknüpfung zurück.

+0

vielen Dank .. lassen Sie mich versuchen und überprüfen –

3

hey _stat() oder stat() funktioniert auch auf defekte Verknüpfungen. Das ist der Grund, es gibt keine Alternative wie lstat (UNIX) in Windows.

Wo in Unix stat() mit defekten Links fehlschlägt, wird lstat bereitgestellt, um das Problem zu beheben.

Vielen Dank für Ihre Hilfe.

+0

gehe ich davon aus, die Frage, und diese Antwort, wurden im Rahmen der MSVC der Laufzeitbibliothek gemacht? Unabhängig davon, danke für das Posten dieser Antwort, da es mich davor bewahrt, mich zu wundern, warum zum Teufel jemand sich die Mühe machen würde, ein '_stat()' zu machen, das Abkürzungen folgt, aber kein '_lstat() 'macht, das nicht geht damit. Ich meine, Ersteres ist viel mehr Arbeit, bis zu dem Punkt, an dem jeder, der schlau genug ist, genügend Zeit während des Prozesses zu haben, um zu erkennen, dass sie auch Letzteres notwendig machen. – SamB

6

Die akzeptierte Antwort bietet kein vollständiges stat Äquivalent. Die stat Struktur wird als

definiert
struct stat { 
       dev_t  st_dev;  /* ID of device containing file */ 
       ino_t  st_ino;  /* inode number */ 
       mode_t st_mode; /* protection */ 
       nlink_t st_nlink; /* number of hard links */ 
       uid_t  st_uid;  /* user ID of owner */ 
       gid_t  st_gid;  /* group ID of owner */ 
       dev_t  st_rdev; /* device ID (if special file) */ 
       off_t  st_size; /* total size, in bytes */ 
       blksize_t st_blksize; /* blocksize for filesystem I/O */ 
       blkcnt_t st_blocks; /* number of 512B blocks allocated */ 
       time_t st_atime; /* time of last access */ 
       time_t st_mtime; /* time of last modification */ 
       time_t st_ctime; /* time of last status change */ 
      }; 

aber GetFileAttributes.. bietet keine Eigentümerinformationen (es gibt Daten in einem WIN32_FIND_DATA Objekt). Wenn Sie diese Besitzerinformationen benötigen, sieht es so aus, als könnten Sie GetSecurityInfo [1] verwenden.

[1] https://msdn.microsoft.com/en-us/library/windows/desktop/aa446629%28v=vs.85%29.aspx

Verwandte Themen