PDA

View Full Version : چستچوی فایلها



Yasersadegh
شنبه 24 آذر 1386, 23:46 عصر
با سلام خدمت دوستان گرامی
من می خوام کدی بنویسم که تمام فایلهای با یک پسوند خاص رو( مثلا پسوند Jpg) از روی کل درایو های سیستم پیدا کنه و در یک پوشه کپی کنه.
در C ویا C++ چطوری می تونم اینکارو انجام بدم. آیا C و یا C++ دستوری برای کپی فایلی از جایی به جای دیگر روی هارد رو داره.
ممنون میشم اگر کسی کمک کنه.:لبخندساده:

با تشکر

Yasersadegh
یک شنبه 25 آذر 1386, 22:48 عصر
لطفا یکی هم به این سوال جواب بده.

با تشکر

404_3140
یک شنبه 25 آذر 1386, 23:22 عصر
راستش شخصا نمی دونم چطوری با c می شه. اما اگه لینوکس داری من با shell scripting می تونم در این زمینه کمکت کنم. و اگه می خوای آخرش کار رو با c انجام بدی، می تونم یه دستور بگم که دستورات شل رو بتونه توی c برات اجرا کنه .. اگه این به دردت می خوره بگو تا بگم:لبخند:

sasan_vm
دوشنبه 26 آذر 1386, 16:51 عصر
سلام

با توابع findfirst , findnext که از توابع DOS هستند می توانید فایل مورد نظر را Search کنید و با استفاده از یک تابع بازگشتی یک درایو را با همه دایرکتوری ها و زیرشاخه ها می توانید جستجو کنید.
برای کپی کردن فایل مورد نظر هم می توانید از تابع system استفاده کنید که دستورات dos را اجرا میکند یا یک تابع بنویسید که فایل مبدا را خوانده و در مقصد write کند (کار مشکلی نیست).

یک برنامه برای حذف یک دایرکتوری با همه زیرشاخه هاش زمان دانشجویی نوشته بودم که از همین روش بصورت بازگشتی استفاده میکرد ،اگه پیدا کردم ارسال میکنم.

sasan_vm
دوشنبه 26 آذر 1386, 17:01 عصر
خوب مثل اینکه شانس داری تو اولین cd پیدا شد، واسه کدی که میفرستم نخندین مربوط به درس برنامه نویسی زبان C (سال 1374) است::لبخند:


/************* Include files *********************************************/
#include <io.h>
#include <dir.h>
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*********** Consts ************************************************** ***/
#define MAXPATH 80
/********** Function Prototypes *****************************************/
void rdel(void);
void del_files(void);
/*=========================== MAIN PROGRAM ============================*/
void main(int argc, char *argv[]){
char current_dir[MAXPATH], ch;
if( argc != 2) {
printf("\nFormat : dellist <filename> \n");
exit(1);
}
getcwd(current_dir, MAXPATH); /* get working dir */
if( chdir(argv[1]) == -1 ) {
printf("\ncan not access to dir.!!\n");
exit(2);
}
printf("\nAre you sure [y/n] ? ");
ch = getch();
if( ch != 'y' && ch != 'Y' ) {
chdir(current_dir); /*return to current dir*/
printf("\n\n %s <DIR> is not delete.\n", argv[1] );
exit(5);
}

printf("\n");
rdel(); /* delete list */
chdir(".."); /* go out assistant directory */
rmdir(argv[1]); /* remove assistant directory */
chdir(current_dir); /* back to working directory */
printf("\n %s <DIR> is deleted.\n", argv[1]);
return;

}
/*============= Function rdel() =======================================*/
void rdel(void){
struct ffblk a_dir;
int i;


del_files(); /* delete all file's in subdirectory */
i = findfirst("*.*", &a_dir, FA_DIREC);
if( strcmpi(a_dir.ff_name,".") == 0 ) { /* check for void directory */
i = findnext(&a_dir); /* . <DIR> */
i = findnext(&a_dir); /* .. <DIR> */
}
while( i == 0 ) {
chdir(a_dir.ff_name);
rdel();
chdir("..");
rmdir(a_dir.ff_name);
i = findnext(&a_dir);
} /* end while */
return;

}
/*========== Function del_files() ========================================*/
void del_files(void ){
struct ffblk a_file;
int i;


i = findfirst("*.*", &a_file, FA_HIDDEN|FA_RDONLY|FA_SYSTEM|FA_ARCH);
while( i == 0 ) {

if( _chmod(a_file.ff_name,1, FA_NORMAL) != 0 ) {
printf("\nERROR- can not change atribute file.\n");
exit(3);
}
if( remove(a_file.ff_name) != 0 ) {
printf("\nERROR- can not delete file.\n");
exit(4);
}
i = findnext(&a_file);
} /* end while */
return;

}
/****************************** END OF CODE *********************************/

Yasersadegh
دوشنبه 26 آذر 1386, 23:03 عصر
آقا ساسان خیلی ممنون از اینکه زحمت کشیدید و کدتونو فرستادید، خیلی بدردم خورد.