我正在做一個任務,需要我創建一個類似於ls的函數。 我的代碼工作正常,但是當涉及到實施的從文件夾中檢索文件的屬性
ls -l child //where child is a folder
的行爲有一個怪異的行爲。
比方說,我在文件夾「父」,並在其中我有一個子文件夾,'孩子',其中包含一些文本文件。當我從父文件夾運行我的程序時,它會找到該文件夾並打印出文本文件的屬性。但是,只有當父文件夾中存在相同的文件時,它纔會打印子文件夾中的文件。
下面是我使用的代碼片段,
char CurrDir[100];
DIR *pDir = NULL;
struct dirent *pFileNames = NULL;
getcwd(CurrDir, sizeof(CurrDir))
strncat(CurrDir, "/", strlen(CurrDir));
unsigned int CurrDirLen = strlen(CurrDir);
unsigned int CombSize = CurrDirLen + strlen(argv[1]);
char SuperCharArr[CombSize];
for(int i = 0; i < CombSize; ++i)
{
if(i < strlen(CurrDir))
SuperCharArr[i] = CurrDir[i];
else
SuperCharArr[i] = argv[1][i%CurrDirLen];
}//for
//insert null character at the end of the character
SuperCharArr[CombSize] = '\0';
pDir = opendir(SuperCharArr);
printf("%s\n", SuperCharArr);
if(pDir != NULL)
{
//Directory detected as pDir is a DirectoryStream
printf("%s\n", "pDir not null");
PrintHeader();
while((pFileNames = readdir(pDir)) != NULL)
{
PrintFileDeails(pFileNames);
}
}//if
'READDIR()'但我想它返回只有文件__name__,而不是全部__path__。換句話說,您需要先使用SuperCharArr路徑名限定'pFileNames-> d_name',然後才能使用它。 – AAT 2014-10-20 10:32:05
@AAT是的,但是在每個循環中它都會返回文件名,它是您正在讀取的目錄中的每個文件的屬性,在這種情況下由pDir指針表示。不過,謝謝你的建議。 – winhung 2014-10-22 06:12:54
等等,你的評論讓我檢查了一些東西,我認爲你是對的。它正在檢查錯誤的路徑。至少,在我的函數PrintFileDeails()中,它是。謝謝,我很快就會發布正確答案。 – winhung 2014-10-22 06:39:10