2010-03-09 28 views
1

我來自C#背景,我正在開發一個C++項目。我需要打開目錄中的文件,然後在文件中處理這些數據。問題出在我的目標環境(Greenhills Integrity)上,我無法訪問「目錄」。看來C++沒有一個目錄的概念。爲什麼不?這個問題在C#中很簡單。我無法鏈接到任何大型圖書館(BOOST或dirent)來獲取文件。我可以使用fopen打開一個文件,但我不會總是知道文件名,所以我必須將目錄「strcat」到每個文件名以便「打開」這些文件。確定目錄中的文件

我需要一種方法來在不使用外部API的情況下獲取目錄中的文件名。那可能嗎?

+0

在C++中沒有目錄的概念。底層系統將文件和目錄與「句柄」相同。 IIRC在文件系統句柄上有一個標誌,表示它是否是目錄(查看stat函數)。 – 2010-03-09 14:54:46

+0

自Greenhills Integrity支持POSIX以來增加了'posix'標籤。 – 2010-03-09 15:07:35

回答

3

不,這是不可能的。 C++沒有「內置」目錄功能 - 您需要使用某種類型的庫。

+0

當然這是可能的。雖然C++沒有任何特定的目錄類(如文件流),但您可以只使用底層的系統調用 - readdir et al。 http://www.cs.cf.ac.uk/Dave/C/node20.html – 2010-03-09 14:53:25

+3

readdir不是系統調用。 C++中的所有I/O(如C中)都是通過庫預先生成的。 – 2010-03-09 14:54:13

4

主要的C++ API有目錄。在Windows上,從POSIX上的readdir開始或在FindFirstFile()上開始。格林希爾斯似乎是support POSIX

+0

爲什麼downvote? – 2010-03-09 14:54:19

+0

也許有人認爲在Win32和Unix上完成某些事情的暗示對於黑客入侵Greenhills Integrity的人有所幫助?提醒你,雖然不是我,但我不會責怪他們。 – sbi 2010-03-09 14:56:07

+1

我最初因爲readdir不是一個通用的C++函數而被低估,但是自從編輯指示所需的功能是特定操作以來已重新投入使用。 – 2010-03-09 15:00:15

2

請檢查您的操作系統。每個目錄處理都不同。如果要在Microsoft Windows上列出/查詢目錄,則必須使用Windows 32 API,如果要在Linux上列出/查詢目錄,則必須使用Linux API(例如opendir/stat)。

+1

查看http://stackoverflow.com/questions/883594/microsoft-visual-studio-opendir-and-readdir-how – 2010-03-09 14:52:44