2012-02-09 40 views
0

尋找一個線路上使用我有路徑名的文件到文件:哪種方法在文件

/my/path1 
/my/path11 
/my/path12 
/my/path13 

的文件結構,它在每一行的各個路徑。我想要做的就是在上面的文件中多次搜索字符串/my/path1或其他任何的存在

我可以想到2種方法。

  1. 每次都按行獲取文件內容,然後搜索字符串。好處是,該文件可以是anysize,我不需要擔心緩衝區溢出。

  2. 將內容加載到緩衝區中並使用緩衝區進行搜索。但由於我不能控制文件大小,因此我應該謹慎處理。

什麼是最好的方法?我在unix工作。 C中是否有任何內置庫命令可用於此目的?或者我該如何在C代碼中使用awk完成相同的任務。

+0

你必須使用C,不能只使用系統命令和''sed' /'awk'的execv系列?否則執行:'sed -n'/ pathtomatch/p'pathfile.txt' – Bort 2012-02-09 10:21:51

回答

1

如果你使用stdio,它會爲你做緩衝。您可以使用功能setvbuf更改其操作,以緩衝多條線。 getline可以用來逐行檢查。

+0

'getline'是C++的一部分,不是嗎? – mikithskegg 2012-02-09 10:22:59

+0

它是stdio(GNU擴展)的一部分 - C.請參閱http://www.gnu.org/software/libc/manual/html_node/Line-Input.html或者您可以使用fgets – 2012-02-09 10:29:09

+0

O,謝謝。我不知道這個功能。我已經讀過'man getline',並發現它非常有用。尤其是它能夠重新分配動態緩衝區,如果它不足以獲取所有字符串。 – mikithskegg 2012-02-09 10:35:03

0

我認爲將所有文件加載到內存中並不是一個好主意。我猜,使用fgetsstrcmp是最好的方法。