2012-11-17 123 views
2

什麼是閱讀,當你知道會有很多的目錄中提取文本文件中的數據正確的方法是什麼?我知道你可以使用fopen()來獲取指向該文件的指針,然後執行類似while(fgets(..) != null){}的操作來從整個文件讀取數據,但是我怎樣才能從另一個文件讀取數據呢?我想遍歷目錄中的每個文件。讀取多個文本文件

+0

的每個文件?除了pthreads,它可以讓你同時讀取許多文件,因爲你的機器上有核心,我不知道有什麼辦法。 – Shredderroy

+2

難道你不能簡單地關閉第一個文件並繼續使用相同的指針來打開下一個文件並在循環中運行? – Kairan

回答

2

山姆,你可以用執行opendir/readdir的如下面的小功能。

#include <stdio.h> 
#include <dirent.h> 

static void scan_dir(const char *dir) 
{ 
    struct dirent * entry; 
    DIR *d = opendir(dir); 

    if (d == 0) { 
     perror("opendir"); 
     return; 
    } 

    while ((entry = readdir(d)) != 0) { 
     printf("%s\n", entry->d_name); 
     //read your file here 
    } 
    closedir(d); 
} 


int main(int argc, char ** argv) 
{ 
    scan_dir(argv[1]); 
    return 0; 
} 

這只是打開一個命令行上命名的目錄,並打印它包含的所有文件的名稱。但不是打印的名字,你可以爲你喜歡同時處理文件...

+0

這可行,但我收到奇怪的行爲:對於2次迭代,它打印「。」然後「..」,顯然不是文件名。其餘的打印出來很好。有任何想法嗎? – Sam

+0

在Linux中,一個點表示當前目錄,兩個點表示父目錄。兩者都是任何目錄中的有效對象。 – dst2

1

通常文件的列表被提供給程序在命令行上,並且因此被提供作爲第二個參數傳遞給主指針陣列中的()。即調用shell用於查找目錄中的所有文件,然後您的程序只是遍歷argv []來打開和處理(以及關閉)每一個文件。

見p。 「The C Programming Language」中的162,Kernighan和Ritchie,第二版,爲您可以使用的代碼提供了一個幾乎完整的模板。用該例中的filecopy()函數替代您自己的處理。

如果你真的需要讀取直接從你的程序的目錄(或目錄),然後你要在執行opendir(3)和相關的功能在libc中讀了。某些系統還提供了一個稱爲ftw(3)或fts(3)的庫函數,這些函數也非常方便。