代碼如下:

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <direct.h>
char Chinaname[100]="C:\\Documents and Settings\\Administrator\\桌面\\jince\\Test2\\Chinaname.txt";

int HoZui(char Filename[])

{
int i,j=0;
int len=strlen(Filename);
char s[100],s0[100]="gpj";
for(i=len-1;i>=0;i--)
{
if(Filename[i]=='.')
break;
s[j]=Filename[i];
j++;
}
s[j]='\0';
if(strcmp(s,s0)==0)
return 1;
else
return 0;
}
void mypower1(const char* StartPath,const char* FinalPath)

{
FILE *fp1,*fp2,*fp3;
int c,count=0,chage[100],flag=1;
int pub[10];
memset(pub,0,sizeof(pub));
int i=0,j=0,k=0,n=0;
fp1=fopen(StartPath,"ab+");
fp2=fopen(FinalPath,"ab+");
fp3=fopen(Chinaname,"ab+");

while((c=fgetc(fp3))!=EOF)
{
chage[i]=c;
i++;
}
while(1)
{
j=0;
if(count<5)
{
for(k=0;k<4;k++)
{
c=fgetc(fp1);
pub[j]=c;
}
if((pub[0]==177)&&(pub[1]==177)&&(pub[2]==190)&&(pub[3]==169)) 
{
count++;
for(n=0;n<4;n++)
fputc(chage[n],fp2);
}
else
{
for(n=0;n<4;n++)
fputc(pub[n],fp2);
}
}
else
{
if((c=getc(fp1))!=EOF)
{
fputc(c,fp2);
}
else
break;
}
}
}



void mypower2(const char* StartPath,const char* FinalPath)

{
FILE *fp1,*fp2;
int c;
fp1=fopen(StartPath,"ab+");
fp2=fopen(FinalPath,"ab+");
while((c=fgetc(fp1))!=EOF)
fputc(c,fp2);
}
//FILE *fp;
void findFile(char StartPath[],char FinalPath[])//遞歸函數

{
char szFind[MAX_PATH];
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
char szFilestart[MAX_PATH],szFilefinal[MAX_PATH];
strcpy(szFind,StartPath);
strcat(szFind,"\\*.*");//利用通配符找這個目錄下的所以文件,包括目錄
hFind=FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind) return;
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//這是目錄
{
if(FindFileData.cFileName[0]!='.')//.表示當前目錄,因為每個目錄下面都有兩個默認目錄就是..和.分別表示上一級目錄和當前目錄
{
//system ("PAUSE");
/**//* if(strcmp(FindFileData.cFileName,"image")!=0)
{
printf("當前路勁為:\n%s\n 請修改Chinaname文件夾\n",StartPath);
system ("PAUSE");
}*/
strcpy(szFilestart,StartPath);
strcat(szFilestart,"\\");
strcat(szFilestart,FindFileData.cFileName);


strcpy(szFilefinal,FinalPath);
strcat(szFilefinal,"\\");
strcat(szFilefinal,FindFileData.cFileName);
mkdir(szFilefinal);

findFile(szFilestart,szFilefinal);//尋找這個目錄下面的文件
}
}
else
{
// fprintf(stdout,"%s\\%s\n",StarPath,FindFileData.cFileName);//打印出目錄下的文件的路徑和名稱
char Filename[100];
strcpy(Filename,FindFileData.cFileName);
strcpy(szFilestart,StartPath);
strcat(szFilestart,"\\");
strcat(szFilestart,FindFileData.cFileName);
strcpy(szFilefinal,FinalPath);
strcat(szFilefinal,"\\");
strcat(szFilefinal,FindFileData.cFileName);
// fprintf(fp,"%s\\%s\n",StarPath,FindFileData.cFileName);//這將結果存檔到c:\\path.txt中。
if(HoZui(Filename))
{
mypower2(szFilestart,szFilefinal);
}
else
{
mypower1(szFilestart,szFilefinal);
}
}
if(!FindNextFile(hFind,&FindFileData))//尋找下一個文件
break;
}
FindClose(hFind);//關閉句柄
}
int main()

{
// fp = fopen("C:\\path.txt","w");
char FinalPath[100]="C:\\Documents and Settings\\Administrator\\桌面\\jince\\Test3";
char StartPath[100]="C:\\Documents and Settings\\Administrator\\桌面\\jince\\Test2";
findFile(StartPath,FinalPath);//遍歷StartPath下的所有文件,把它寫到FinalPath下
//fclose(fp);
return 0;
}文件夾遍歷相關鏈接:http://94here.blog.51cto.com/696155/160870/
WIN32_FIND_DATA屬性說明: http://www.cnblogs.com/ty--90/archive/2008/02/21/1076072.html


