2016-12-05 78 views
0

我想知道是否可以打開一個目錄,然後使用fopen打開一個文件。就像在例如:C - opendir + fopen

我有一個MAINDIR和它裏面我已經FILE.TXT所以我想做到以下幾點:

void openFile(const char * filename) 
{ 
    opendir(MAINDIR); 
    fopen(filename, "r"); 
} 

int main() 
{ 
    openFile("file.txt"); 
    return 0; 
} 

我知道我可以做的:的fopen(「路徑/ to/main/dir/filename.txt「,」r「)但我想要更通用的東西。打開一個目錄,然後使該目錄內的每個工作的fopen

感謝

+2

'opendir'不這樣做,請嘗試'chdir'。 –

回答

4

可以使用chdir(const char *)改變你的工作目錄,例如:

chdir("/your/path/") 
2

如果你不喜歡chdir胡鬧了,你當您想要打開該文件時,可以創建完整路徑:

void openFile(const char * filename) 
{ 
    char fullpath[MAXPATHLEN]; 
    sprint(fullpath, "%s/%s", MAINDIR, filename); 
    fopen(fullpath, "r"); 
} 

儘管您可能希望這樣做一些東西。

0

opendir用於讀取目錄的內容,這不會改變相對路徑的解析方式。要改變相對路徑的起點必須使用chdir

chdir(MAINDIR); 
...fopen(relative_path,...); 
0

opendir()功能不會做你想做的。在可用的地方(不是在任何地方,因爲它是由POSIX指定的,而不是C),它提供了一種讀取目錄條目的方法,但它不影響文件名解析,它總是對當前工作目錄執行,至少在首先提供opendir()的實現中。

另一方面,POSIX環境提供chdir(),其中更改當前的工作目錄,因此解決相關文件名的基礎。這可以實現你所要求的。但請注意,工作目錄是一個全過程屬性。通常情況下,構建和使用相對於工作目錄的絕對路徑或路徑是更好的辦法,並且可以將工作目錄保留爲程序啓動時的任何目錄。