2012-06-17 51 views
1

我試圖在Ubuntu中打開相對路徑,但打開第一個文件夾後 - 名爲14 - 代碼無法打開內部文件夾 - 稱爲15嘗試在Ubuntu中打開相對路徑不起作用

int pathsCtr; // number of folders in RelativeArray 

char ** RelativeArray; // the folders in the relative path, currently: 

RelativeArray[0] = "14"; 

RelativeArray[1] = "15"; 
// some code before 

if (pathsCtr > 0 && flag == TRUE) // then we have a relative path 
{ 
    int j = 0; 
    while (j < pathsCtr) // run until the last path and open every one 
    { 
     printf("\n%s\n" , RelativeArray[j]); 
     dirp = opendir(RelativeArray[j]); // open all directories until the last one 
     if (dirp == NULL) 
       return -1; 
     j++; // proceed to the next directory 
    } 

    flag = FALSE; // turn off the flag , we'll never go near this again 
} 

j == 0這行:dirp = opendir(RelativeArray[j]);作品和dirpNULL

但是當j == 1那行dirp = opendir(RelativeArray[j]);失敗,dirpNULL

我在做什麼錯?

編輯:

假設我做的malloc爲RelativeArray上面的代碼之前。

+0

失敗如何?只是不改變目錄或錯誤或??? – Basic

+0

@Basic:當'j == 1'代碼返回'-1',例如'dirp'獲得'NULL'時 – ron

+1

Chris的回答很好,但是也要注意你不想覆蓋dirp:它分配資源對於'DIR',應該用'closedir'釋放。 – pb2q

回答

6

opendir()打開一個目錄來讀取它的內容,但它不會改變進程的工作目錄。

要訪問一個子目錄,您必須通過它相對於當前工作目錄(或其絕對路徑)的完整路徑來指定它。

您可以通過將您的字符串與適當的分隔符連接起來。

由於您似乎沒有對opendir()返回的目錄流指針做任何事情,而不是檢查它是否爲非null,所以很可能這不是您想要使用的函數。你可能想看看chdir()而不是(man 2 chdir),但是要考慮任何不希望的結果。

+0

感謝您的回答。問題是,我的代碼,我的實際代碼,完全與絕對路徑工作(我正在尋找一個「文件項目」,當給出(1)路徑和(2)文件名時,我需要檢查所有這些文件的子目錄,但是當我打到一個相對路徑時,代碼失敗了,所以上面的代碼用於到達「起始點」,並從那裏開始搜索文件。一個更好的主意也許?再次感謝! – ron

+0

'man 3 readdir'和'man 3 scandir'可能是有趣的。或者你可以找出如何使用現有的find命令,也許通過一個exec函數。 –