2016-07-15 96 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

我试图编写一个打印出目录中所有文件名的程序 –