2016-07-15 95 views
-1

我在閱讀「The C Progamming Language」並練習代碼以打印文件夾內的文件名。下面是代碼作者的片斷爲UNIX系統:Window中文件夾的結構?

#ifndef DIRSIZ 
#define DIRSIZ 14 
#endif 
struct direct /* directory entry */ 
{ 
ino_t d_ino; /* inode number */ 
char d_name[DIRSIZ]; 
} direct 
... 
struct direct dirbuf; 
while(read(afiledescriptor, (char*) &dirbuf, sizeof(dirbuf)) 
== sizeof(dirbuf)){/* do sth with dirbuf */} 

問題是我不知道如何在Windows目錄文件描述符構造,因此無法指定第三個參數(讀取字節parameter,DIRSIZE)在_read中。任何人都可以幫忙謝謝。

+0

以及這是如何相關的? –

+0

這本書說UNIX中的一個文件夾是一個頭文件結構的文件,它具有上面的'直接'類型,包含1個inode編號和一個文件名。每個文件的每個標題。所以代碼通過標題讀取文件夾,標題,並打印出文件的名稱。但是我需要知道一個頭文件的大小,在這個例子中,UNIX系統的版本是14,就像本書寫的那樣。我不知道Window中頭部的大小。 –

+2

@最佳名稱:Windows不是Unix。說實話,你在那裏的書中的描述並不完全正確。有不同種類的Unix(AT&T System-V,BSD,Solaris,MacOS X(是的,其核心的Apple OS是Unix)),它們都使用略有不同的目錄結構。這就是爲什麼你永遠不應該使用你在那裏的方法列出文件。由於這種多樣性,在所有* nix OS-es和Linux支持的POSIX標準中都指定了API:http://man7.org/linux/man-pages/man3/readdir.3.html - 注意你**不要**自己定義dirent! – datenwolf

回答

3

通常,Linux/Unix和Windows之間的文件系統函數調用是非常不同的。您無法在Windows上應用您的Unix/Linux兼容C代碼。有關Windows世界中的文件系統的所有信息,請參閱MSDN

要列出目錄中的文件,例如MSDN here上有一個很好的例子。

一般而言,您將使用FindFirstFileFindNextFile。閱讀MSDN上的文檔,示例等。

當你來自Unix世界時,你將不得不習慣Windows上的工作方式。這需要一些時間,但是我想這是值得的。

+0

你能給我一個更具體的鏈接嗎?我是新的 –

+0

你能告訴我你想達到什麼嗎?據我所知,沒有確切的相當於您在Windows上所接受的結構,... 雖然似乎有Windows實現: [Here](http://www.two-sdg.demon。 co.uk/curbralan/code/dirent/dirent.html) – inzanez

+0

我試圖編寫一個打印出目錄中所有文件名的程序 –