johnroyer 10 發表於 January 31, 2006 檢舉 Share 發表於 January 31, 2006 C要如何寫才能讀取目錄下的檔案名稱並把檔案名稱存進變數中做處理?有函式可以用嗎? 鏈接文章 分享到其他網站
電腦狂 10 發表於 January 31, 2006 檢舉 Share 發表於 January 31, 2006 你的目的呢?讀寫檔嗎?如果是讀寫檔的話有語法可循FILE *infilep,*outfilepinfilep=fopen("檔名","r");//讀檔outfilep=fopen("檔名","w");//寫檔P.S.以上須含括stdio(C++好像是iostream)標頭檔 鏈接文章 分享到其他網站
johnroyer 10 發表於 February 4, 2006 作者 檢舉 Share 發表於 February 4, 2006 因為有個目錄檔案太多想說自己寫一個程式把資料夾裡的檔案名稱做成清單不知道C裡面有沒有函式可以讀取目錄 鏈接文章 分享到其他網站
ckguozhi 10 發表於 February 5, 2006 檢舉 Share 發表於 February 5, 2006 你要不要用系統提供的指令然後再把指令傳回的資料讀進程式?比如說unix的ls、ll...dos的dir用法是這樣:#include<stdio.h>FILE *xxx=popen("指令","r");上面r也可以填r+其他的都不要用填w跟w+會直接把資料顯示出來a跟a+一讀就當...其他地方就跟一般檔案使用一樣最後再pclose(FILE *);就好了如果你輸入的指令要求使用者額外輸入東西如砍檔案時可能問你yes or no?這種似乎沒辦法讓程式代打我還沒辦法解決還有feof(FILE *);也可以用讀到結尾值為真至於讀進去以後要怎麼把你要的資料抽出來...這您就加油吧 鏈接文章 分享到其他網站
電腦狂 10 發表於 February 7, 2006 檢舉 Share 發表於 February 7, 2006 想問一下樓上的學長popen應該是開檔的指令吧那是C++的函式嗎???因為我寫C目前用的開檔指令是fopen 鏈接文章 分享到其他網站
ckguozhi 10 發表於 February 7, 2006 檢舉 Share 發表於 February 7, 2006 喔喔那是我沒講清楚1. 引入stdio.h,是C的函式(C++裡面用啥我不知道)2. popen是用於使用系統提供的指令用法像這樣FILE *xxx=popen("dir","r");就好像你平常在命令提示字元裡面打dir會出現這些東西 磁碟區 C 中的磁碟沒有標籤。 磁碟區序號: F444-985D C:\Documents and Settings\A人 的目錄2004/12/21 下午 02:48 <DIR> .2004/12/21 下午 02:48 <DIR> ..2006/02/04 下午 08:29 600 PUTTY.RND2004/01/16 上午 02:30 <DIR> WINDOWS2006/02/07 上午 02:47 <DIR> 甲片2004/01/16 上午 02:18 <DIR> 「開始」功能表2005/05/31 上午 09:20 <DIR> Favorites2006/02/07 下午 03:59 6,553,600 ntuser.dat 2 個檔案 6,554,200 位元組 6 個目錄 1,503,043,584 位元組可用 所以從xxx裡面就會讀到上面這些東西讀取一樣是用fgets、fgetc、fscanf等這些指令喔喔還有我們同年 鏈接文章 分享到其他網站
電腦狂 10 發表於 February 8, 2006 檢舉 Share 發表於 February 8, 2006 補充~C++是叫做cstdio原來如此~我瞭了喔喔~原來是同學呀~ 鏈接文章 分享到其他網站
johnroyer 10 發表於 February 10, 2006 作者 檢舉 Share 發表於 February 10, 2006 去查一下 popen() 的用法取出字串看來真的很麻煩我可能會因此抓狂……天啊……我最老 =.=" 鏈接文章 分享到其他網站
ckguozhi 10 發表於 February 10, 2006 檢舉 Share 發表於 February 10, 2006 發現PHP有opendir();跟readdir();(有玩EasyPHP的可以去看一下www裡面的index.php)可以達到你的目的...只是不知道C有沒有對應的... 鏈接文章 分享到其他網站
ya790206 10 發表於 February 10, 2006 檢舉 Share 發表於 February 10, 2006 這是我寫的讀取目錄下檔案的程式下面是c語言程式,不是php#include<stdio.h>#include<stdlib.h>int main(){ FILE *ftr=popen("dir","r"); char temp,data[100][100],output[100][51]; int i=0,j=0; while(!feof(ftr)) { temp=fgetc(ftr); if(temp=='\n') { data[i++][j]='\0'; j=0; } else { data[i][j++]=temp; } } for(j=5;j<i-2;j++) sscanf(data[j],"%*s %*s %*s %*s %s",output[j]); for(j=0;j<i-2;j++) printf("%s\n",output[j]); fclose(ftr); system("pause"); return 0;} 註解有空我在打,不會很難懂的這程式讀取目錄下的東西必須90個以下(可以修正)檔名不能超過25個中文字(可以修正)檔名不能有空白(不能修正)話說我不小心按到噓文了,對不起怎樣去掉噓文? 鏈接文章 分享到其他網站
johnroyer 10 發表於 February 13, 2006 作者 檢舉 Share 發表於 February 13, 2006 恭喜大大!不到50行就寫出來了!只能讀90個檔案的問題可以用動態宣告解決小意思啦……不用擔心如何讀取、判斷才是重點! 鏈接文章 分享到其他網站
johnroyer 10 發表於 February 18, 2006 作者 檢舉 Share 發表於 February 18, 2006 請問for(j=5;j<i-2;j++) sscanf(data[j],"%*s %*s %*s %*s %s",output[j]);是將非必要字串去除但是 dir 列表中間的是空白還是 \t 字元? 鏈接文章 分享到其他網站
ya790206 10 發表於 February 18, 2006 檢舉 Share 發表於 February 18, 2006 dir 列表中間的是空白scanf("%c %c",&a,&b);表讀入一字元,略過中間空白、換行、tab之後再讀一字元所以是空白或tab沒影響 鏈接文章 分享到其他網站
ckguozhi 10 發表於 February 19, 2006 檢舉 Share 發表於 February 19, 2006 其實...各位要不要用用看dir /b真的少很多步驟捏... 鏈接文章 分享到其他網站
ya790206 10 發表於 February 19, 2006 檢舉 Share 發表於 February 19, 2006 原來dos的參數前面是加/不是加-害我一直試dir -?他說找不到檔案= =||||||| 習慣用Linux命令了 鏈接文章 分享到其他網站
johnroyer 10 發表於 February 22, 2006 作者 檢舉 Share 發表於 February 22, 2006 最初由 ckguozhi 發表其實...各位要不要用用看dir /b真的少很多步驟捏... 早說咩我都快寫完了寫的很頭大 @_@ 鏈接文章 分享到其他網站
johnroyer 10 發表於 February 22, 2006 作者 檢舉 Share 發表於 February 22, 2006 其實這樣就不用寫了直接打「dir /b /o:n >> file.txt」就完全OK了害我想破頭 ><" 鏈接文章 分享到其他網站
mary94 10 發表於 February 22, 2006 檢舉 Share 發表於 February 22, 2006 #include<stdio.h>#include<dirent.h>int main(){ DIR *a=opendir("."); while(readdir(a)) { printf("%s\n",a->dd_dir.d_name); } closedir(a); return 0;}太晚講...好吧其實這才是你一開始要找的函式引入dirent.h詳細說明有空在PO不好意思m(_ _)m糟糕用到我妹的帳號...我是ckguozhi 鏈接文章 分享到其他網站
johnroyer 10 發表於 February 23, 2006 作者 檢舉 Share 發表於 February 23, 2006 壇主盜用帳號…… XD我想說國小的怎麼這麼強dirent.h 算是標準函式庫嗎?我不打算用太高階的東西來寫 鏈接文章 分享到其他網站
ckguozhi 10 發表於 February 24, 2006 檢舉 Share 發表於 February 24, 2006 /* * DIRENT.H (formerly DIRLIB.H) * This file has no copyright assigned and is placed in the Public Domain. * This file is a part of the mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER within the package. * */沒版權的應該是?雖然FreeBSD裡面也有這個檔案但是定義似乎有點不太一樣大哥你還是用popen的辦法好了--壇主? 鏈接文章 分享到其他網站
johnroyer 10 發表於 February 26, 2006 作者 檢舉 Share 發表於 February 26, 2006 最初由 ckguozhi 發表/* * DIRENT.H (formerly DIRLIB.H) * This file has no copyright assigned and is placed in the Public Domain. * This file is a part of the mingw-runtime package. * No warranty is given; refer to.............(論壇訊息:引文過長 恕刪) 不不不popen似乎不是常用函式庫有些編譯器不支援So....之前改成 dir /o:n >> log.txt然後用 fopen 讀檔成功後再將 log.txt 刪除不過既然你已經說了就根本不用寫程式啦直接 dir /b /o:n >> log.txt就是我們要的東西啦 鏈接文章 分享到其他網站
johnroyer 10 發表於 March 8, 2006 作者 檢舉 Share 發表於 March 8, 2006 寫出來了不過仍然是用 DIR#include <stdio.h>#include <stdlib.h>// strtok(), strtok_r()int main(){ FILE *cmd; FILE *pt; char **in,tmp; char *ch_pt[100]; // for strtok() char str[260]; // for strtok() char str2[260]; char *str_chk; int c_num=10,cnt=0; int a,b,c,d; in = (char**)malloc( sizeof(char*) * c_num ); for(a=0;a<c_num;a++) in[a]=(char*)malloc( sizeof(char) * 260 ); //--------------------------------------------- system("dir /o:n >> log.tmp"); cmd = fopen("log.tmp","r"); a=0; while( !feof(cmd) ) { tmp = fgetc(cmd); if( tmp=='\n' ) { in[cnt][a]='\0'; if( cnt+1 >= c_num ) { in = (char**)realloc(in,sizeof(char*) * (c_num+10)); for(c=c_num;c<c_num+10;c++) in[c]=(char*)malloc( sizeof(char) * 260 ); c_num+=10; } cnt++; a=0; // in[cnt][a] }else{ in[cnt][a]=tmp; a++; } } fclose(cmd); remove("log.tmp"); for(a=0;a<cnt;a++) printf("%s\n",in[a]); /********************************************** 規則: 1st token 一定有 / 斜線 3rd token 一定有冒號 (時間) 4th token 有 <DIR> 表示是資料夾 5th token 以後(包括 5th token)的都是檔案名稱 **********************************************/ pt = fopen("result.txt","w"); a=0; while(a<cnt) { //printf("%s\n",in[a]); sprintf(str,"%s",in[a]); //printf("%s\n",str); ch_pt[0] = strtok(str," "); if( ch_pt[0] != NULL ) str_chk = strstr(ch_pt[0],"/"); if(str_chk!=NULL) { for(b=1;b<100;b++) { ch_pt[b]=strtok(NULL," "); if( ch_pt[b] == NULL ){ break; } } str_chk = strpbrk(ch_pt[3],"DIR"); // if( str_chk == NULL ) { fprintf(pt,"%s",ch_pt[4]); for(c=5;c<100;c++) { if(ch_pt[c]==NULL) break; fprintf(pt," %s",ch_pt[c]); } fprintf(pt,"\n"); } } a++; for(b=0;b<100;b++) ch_pt[b] = NULL; for(b=0;b<260;b++) str[b] = '\0'; } fclose(pt); //--------------------------------------------- free(in); //system("pause"); return 0;} 鏈接文章 分享到其他網站
Recommended Posts
請登入後來留意見
在登入之後,您才能留意見
立即登入