當前位置:首頁 » 編程語言 » c語言glob函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言glob函數

發布時間: 2022-07-18 14:28:15

c語言在頭文件中調用函數

你把#include "lab1.c"加在主函數頭文件中看看!並且把 lab1.h 和lab1.c 這兩個文件都放到與主函數同一個目錄下.

❷ 用C語言批量更改文件名

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <iconv.h>
#include <errno.h>
/*int to_iconv(char *in,size_t in_bytes,char *out,size_t out_bytes,
const char *from,const char *to)*/
int to_iconv(char *in,char *out,size_t out_bytes,const char *from,const char *to)
{
iconv_t cd;
size_t in_bytes=strlen(in);
//size_t out_bytes;
if((cd=iconv_open(to,from)) == (iconv_t)-1)
{
perror("iconv_open");
return -1;
}
if(iconv(cd,&in,&in_bytes,&out,&out_bytes) == -1)
{
perror("iconv");
return -1;
}
iconv_close(cd);
return 0;
}
void read_and_iconv(char *path,const char *from,const char *to)
{
DIR *dirp;
struct dirent *dir;
struct stat buf;
char temp[512]; //用於保存轉換後的文件名稱
if((dirp=opendir(path)) == NULL) //讀取文件夾
{
perror("opendir");
return;
}
chdir(path); //進入到該文件夾內部
while(dir=readdir(dirp)) //讀取該文件夾下所有文件
{
if((strcmp(dir->d_name,".") == 0) || (strcmp(dir->d_name,"..") == 0))
//過濾掉.以及..文件夾,不然會死循環的
continue;
bzero(temp,sizeof(temp));
to_iconv(dir->d_name,temp,sizeof(temp),from,to); //進行編碼轉換
rename(dir->d_name,temp); //進行重命名
printf("rename %s to %s\n",dir->d_name,temp);
stat(temp,&buf);
if(S_ISDIR(buf.st_mode)) //判斷當前讀取的文件是否為文件夾
{
read_and_iconv(temp,from,to); //如果是則遞歸處理
chdir(".."); //處理完成後一定要記得返回上一層目錄哦,不然其它文件就無法處理了
}
}
closedir(dirp);
}
int main(int argc,char **argv)
{
read_and_iconv(argv[1],argv[2],argv[3]);
/*第一個參數是要轉換的文件夾所在的文件夾名稱
*第二個參數是文件名稱所使用的編碼(這里為GBK)
*第三個參數是要轉換成何種編碼(這里為UTF-8)
*/
return 0;
}

❸ Linux文件系統C語言編程的一道編程題目求解答。


包括
#包括
定義MAXSIZE 20
:(INT ARGC的char * argv的[])
{
INT M,N,??FD1,FD2;
個char [MAXSIZE];
(ARGC == 4 &&(* + + argv的)[0 ] ==' - '&& * + + * argv的=='R'&& * + + * argv的=='I')
((FD1 =打開(* + + argv的,O_RDONLY))> 0 &&(FD2 =打開(* + + argv的,O_WRONLY))> 0)
((N =讀(FD1,MAXSIZE))> 0)
(寫(FD2,S, N)= N &&使用lseek(FD2,0,SEEK_CUR)!= -1);
其他
printf的(「寫入錯誤」);
其他
printf的(「開放錯誤「);
(N <0)
printf的(」讀取錯誤「);
返回0;
}
利用課余時間我可以從字面上編程(你在哪裡得到啊)
不明白的可以發送消息^ _ ^

❹ c語言 怎麼查找 當前目錄有哪些 文件

在命令提示符窗口運行:findfile (盤符): *.(文件後綴)
如:[sourcecode language=」plain」]findfile d: *.txt [/sourcecode]
即為找出d盤根目錄下的所有.txt後綴的文件並寫入文件路徑於文件中。

❺ C語言讀取txt文件,思路如下:

#include <stdio. h>
#include <string. h>
void main()
{

FILE *fp;
char name[128],path[128];

fp = fopen("F:\\list.txt","r")
if(fscanf(fp,"%s %s",name,path)!=EOF)
{
if( strcmp(name,"11漢宮秋月")==0)
printf("%s",path)

}
else
printf("沒有找到")

}

❻ linux c glob()函數詳細的使用方法,將man glob 的英文翻譯出來也行

GLOB
Section: Linux Programmer's Manual (7)
Updated: 12 June
1998
Index
NAME
glob - 形成路徑名稱

描述 (DESCRIPTION)
很久以前 在 UNIX V6 版 中 有一個 程序 /etc/glob 用來 展開 通配符模板.
不久以後 它 成為 shell 內建功能. 現在 人們 開發了 類似的 庫函數 glob(3), 讓 用戶程序 實現 同樣的 功能.
此 規則 遵循 (POSIX 1003.2, 3.13).

通配符匹配 (WILDCARD MATCHING)
包含 '?', '*' 或 '[' 字元的 字元串 稱為 通配符模板(wildcard
pattern). 形成路徑名(globbing) 指 一種 操作, 把 通配符模板 展開為 匹配 該串的 路徑名. 匹配 定義為:
不在 方括弧中 的 '?' 匹配 任意 單個 字元.
不在 方括弧中 的 '*' 匹配 任意 字元串, 包括 空串.

字元集 (Character classes)
對於 表達式 `[...]', 如果 在 第一個 '['符 後面 出現的 第一個 字元 不是
'!', 則 該 表達式 匹配 任意 一個 在 `[...]'內 出現的 字元. 方括弧內 不能 有 空串, 因此 ']' 可以 作為 第一個 字元 出現在
方括弧內. (像 這樣, '[][!]' 匹配 下列三個 字元 中的 任意 一個, '[', ']' 和 '!'.)

范圍集 (Ranges)
字元集 有一個 特例: 用 '-' 分開的 兩個 字元 表示 一個 范圍集. (像 這樣, `[A-Fa-f0-9]'
等於 `[ABCDEFabcdef0123456789]'.) 把 '-' 放到 方括弧內 的 開頭 或 最後 可以 獲得 它的 本意. (像 這樣,
`[]-]' 匹配 ']'和'-' 中 任意 一個. 而 `[--/]' 匹配 `-', `.' 和`/'中任意 一個.)

補集 (Complementation)
表達式 '[!...]' 表示 一個 字元, 該 字元 不匹配 方括弧內 去掉 開頭 '!' 後的
表達式. (像 這樣, `[!]a-]' 匹配 除了 ']', 'a' 和 '-' 的 任意 一個 字元.)
要 去掉 '?', '*' 和 '[' 的 特殊 含義, 可以 通過 前面 加 一個 反斜杠; 或者 在 shell 命令行 中, 通過 引號 來 引用
這些 字元. 在 方括弧內 這些 字元 顯露出 本意, 所以, '[[?*\]' 匹配 這 四個字元中 的 一個: '[', '?', '*', '\'.

路徑名 (PATHNAME)
形成路徑名 功能 應用於 路徑 中 的 每一個 成員部分. 路徑 中 的 '/' 不能 被通配符 '?' 或
'*', 或 范圍集 如 '[.-0]' 匹配. 范圍集 不能 直接 包含 '/', 否則 導致 語法錯誤.
如果 待匹配的 文件名 以'.'開頭, 那麼 這個 '.' 字元 必須 直接 給出. (比如說, 用 'tar c .' 會 更好.)

空列表 (EMPTY LISTS)
上述的 簡單優雅 規則, 把 通配符模板 展開為 匹配的 路徑名, 來源於 最初的 UNIX 定義. 它
允許 展開出 空串, 例如 xv -wait 0 *.gif *.jpg
這里 可能 沒有 *.gif 文件 (而且 不算 錯誤).
然而, POSIX 要求 句法 錯誤 或 路徑名 列表 為 空 時, 保留 通配符模板 不變. (譯注: 即 不展開.)
在 bash 中 可以 通過 設置 allow_null_glob_expansion=true 把 它 強置為 傳統的
風格. (其他 地方 也有 類似的 問題, 例如, 老式的 語句 是

rm `find . -name "*~"`
新的 寫法 為
rm -f nosuchfile `find . -name "*~"`
以 避免 由於 空參數調用 rm 而 產生 錯誤信息.)

注意 (NOTES)

正規表達式 (Regular expressions)
注意, 通配符模板 不是 正規表達式, 盡管 它們 有點象. 首先, 它 匹配 文件名,
而 不是 正文; 其次, 規則 不一樣, 例如 正規表達式 里 的 '*' 代表 零個或多個 前面內容的 重復.
正規表達式 的 方括弧表達式 用 '^' 引導 取反操作, (而不是 '[!...]'). POSIX 聲明, 在 通配符模板 中, '[^...]'
未做 定義.

字元集 和 國際化 (Character classes and Internationalization )
當然, 范圍集 最初 指
ASCII的 范圍, 因此 '[ -%]' 意思是 '[ !"#$%]',
一些 UNIX實現 把 這個 歸納為: 范圍 X-Y 指 X的編碼 到 Y的編碼 之間的編碼字元. 可是, 這 要求 用戶 知道 他們 本地系統的
字元編碼, 此外, 如果本地的 字母表順序 和 字元集順序 不對應, 那 就 更不方便了.
因此, POSIX 對 通配符模板 和 正規表達式 的 方括弧表達法 作了 重大擴展, 上面 我們 知道了 方括弧表達式 中 的 三個 類型, 它們是
(i) 取補集 (ii) 直接列出的 單個字元 和 (iii) 范圍集.
POSIX 對 范圍集 在 國際化 方面 作了 更有力的 說明, 並且 增加了 三個 類型:
(iii) 范圍 X-Y 由 X 和 Y 之間 所有的字元 組成 (包括X和Y), X 和 Y 的 當前編碼序列 由 當前場合的 LC_COLLATE
分類定義.
(iv) 命名字元集, 象

[:alnum:] [:alpha:] [:blank:] [:cntrl:]
[:digit:] [:graph:] [:lower:] [:print:]
[:punct:] [:space:] [:upper:] [:xdigit:]

因此 可以 用 '[[:lower:]]' 代替 '[a-z]', 它 在 丹麥語 里 同樣 有效, 雖然 丹麥的 字母表 里 'z' 後面 還有
三個 字母. 這些 字元集 由 當前場合的 LC_CTYPE 分類定義.
(v) 符號對映, 象 '[.ch.]' 或 '[.a-acute.]', 在 '[.' 和 '.]' 之間的 字元串 是 定義 在 當前場合的
對映元素. 注意 這 可以 是 多字元元素.
(vi) 等類表達式, 象 '[=a=]', 在 '[=' 和 '=]' 之間的 字元串 是 任意 等類 中 的 對映元素, 它 定義在 當前場合.
例如, '[[=a=]]' 可以 等同於 `[a徉溻]' (警告: 這里 有 Latin-1 字元), 也就是
`[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]'.

SEE ALSO
sh(1), glob(3), fnmatch(3),
locale(7), regex(7)

❼ PHP中glob()函數查找指定後綴名的文件

建議參考以下代碼

.
<?php
functionfindFiles($directory,$extensions=array()){
functionglob_recursive($directory,&$directories=array()){
foreach(glob($directory,GLOB_ONLYDIR|GLOB_NOSORT)as$folder){
$directories[]=$folder;
glob_recursive("{$folder}/*",$directories);
}
}
glob_recursive($directory,$directories);
$files=array();
foreach($directoriesas$directory){
foreach($extensionsas$extension){
foreach(glob("{$directory}/*.{$extension}")as$file){
$files[$extension][]=$file;
}
}
}
return$files;
}
var_mp(findFiles("C:",array(

"jpg",
"pdf",
"png",
"html"
)));
?>

把C:改成你需要查找的路徑,裡面放後綴,測試可用。

❽ 會c語言的幫幫忙,我可以通過c語言將多個txt文件合並成一個,問題是太多了麻煩,就想把txt的文件名寫到一

用DOS 命令 total.txt + a1.txt + a2.txt + a3.txt + an.txt
就可以把 a1.txt + a2.txt + a3.txt + an.txt 合並到 total.txt 里。
用 system() 執行 DOS命令 就可以了。

#include <stdio.h>
main(){
char cm[200]="COPY total.txt" ;
char f[20];
int i,n=12;
for (i=1;i< n;i++){
sprintf(f," +a%d.txt",i); // 用這句產生 " +ai.txt" , i=1 到 n, n=12
strcat(cm,f); // 產生 COPY total.txt +a1.txt + a2.txt .....
}
printf("%s\n",cm); // 檢查
// system(cm); // 去掉註解符號就可執行
return 0;
}

❾ glob in Perl

glob再Perl里有兩個意思,一個是數據類型「類型團」(Typeglob),一個是函數。您應該說清楚。

如果您說的是前者:

----------------------------
Perl 裡面有種特殊的類型叫類型團(typeglob)用以保留整個符號表記錄。(符號表記錄 *foo 包括 $foo, @foo, %foo,&foo 和其他幾個 foo 的簡單解釋值。)類型團(typeglob)的類型前綴上一個 *,因為它代表所有類型。

類型團(typeglob)(或由此的引用)的一個用途是是用於傳遞或者存儲文件句柄。如果你想保存一個文件句柄,你可以這么干:

$fh = *STDOUT;

或者作為一個真的引用,象這樣:

$fh = \*STDOUT;

這也是創建一個本地文件句柄的方法,比如:

sub newopen {
my $path = shift;
local *FH; # 不是my() 或 our ()
open(FH,$path ) or return undef;
return *FH: # 不是\*FH!
}
$fh = newopen('/etc/passwd');
參閱 open 函數獲取另外一個生成新文件句柄的方法。
類型團如今的主要用途是把一個符號表取另一個符號表名字做別名。別名就是外號,如果你說:

*foo = *bar;

那所有叫「foo」的東西都是每個對應的叫「bar」的同意詞。你也可以通過給類型團賦予引用實現只給某一個變數取別名:

*foo = \$bar;

這樣 $foo 就是 $bar 的一個別名,而沒有把 @foo 做成 @bar 的別名,或者把 %foo 做成 %bar 的別名。所有這些都隻影響全局(包)變數;詞法不能通過符號表記錄訪問。象這樣給全局變數別名看起來可能有點愚蠢,不過事實是整個模塊的輸入/輸出機制都是建築在這個特性上的,因為沒有人要求你正在當別名用的符號必須在你的名字空間里。因此:

local *Here::blue = \$There::green;

臨時為 $There::green 做了一個叫 $Here::blue 的別名,但是不要給 @There:green 做一個叫 @Here::blue 的別名,或者給 %There::green 做一個 %Here::blue 的別名。幸運的是,所有這些復雜的類型團操作都隱藏在你不必關心的地方。參閱第八章的「句柄參考」和「符號表參考」,第十章的「符號表」,和第十一章,模塊,看看更多的關於類型團的討論和重點。

----------------------------

如果您說的是後者:

----------------------------
glob EXPR
glob
這個函數把 EXPR 的值帶著 shell 那樣的文件名擴展返回。它是實現 <*> 操作符的內部函數。

由於歷史原因,這個演算法和 csh(1) 的擴展風格相匹配,而不是 Bourne shell 的。早於 5.6 版本的 Perl 使用了一個外部的處理,但 5.6 及以後的版本在內部進行聚團的工作。那些第一個字元是點(「.」)的文件被忽略,除非這個字元是明確匹配的。一個星號(「*」)匹配任意字元的任意序列(包括空)。一個問號(「?」)匹配任意一個字元。一個方括弧序列(「[ ... ]」)聲明一個簡單的字元表,比如「[chy0-9]」。字元表可以用音調符號取反,象「*.[^oa]」,它匹配任意非點文件,這些文件的文件名博愛喊一個點,後面跟著一個字元在文件名尾部,但這個字元既不能是「a」也不能是「o」。一個波浪號(「~」)擴展成一個家目錄,象「~/.*rc」是指當前用戶的所有 「rc」文件,或者「~jane/Mail/*」似乎所有 Jane 的郵件文件。花括弧可以用於候補,象在「!/.{mail,ex,csh,twm,}rc」裡面的是獲取那些特定的 rc 文件。

如果你想聚集那些可能包含空白的文件名,你坑內需要直接使用 File::Glob 模塊,因為老祖父 glob 把空白用於分隔多個模式,比如 <*.c *.h>。更多細節,請參閱第三十二章的 File::Glob。調用 glob (或者 <*> 操作符)自動 use 該模塊,因此如果該模塊莫名其妙地從你的庫里消失了,那麼就會拋出一個例外。

當你調用 open 的時候,Perl 並不擴展通配符,包括波浪號。你需要先把結果 glob 起來。

open(MAILRC, "~/.mailrc") # 錯:波浪號是一個 shell 的東西
or die "can't open ~/.mailrc: $!";

open(MAILRC, (glob("~/.mailrc"))[0]) # 先擴展波浪號
or die "can't open ~/.mailrc: $!";
glob 函數和 Perl 的類型團的概念沒有任何關系,只不過它們都用 * 代表多個項。

----------------------------