获取文件夹下所有文件(在不定义Unicode宏情况下)

// FindFile.cpp : 定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include "windows.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

#define MAC_FILENAMELENOPATH 100
void FindFile(TCHAR * Path);
void AnToUn(wchar_t * wszString);
FILE *fp;
int main(int argc, char *argv[])
{
	//setlocal(
	 fp = fopen("E:\\SogouC_save.txt","w+");
	 FindFile(L"E:\\SogouC");
 	 system("pause");
	 return (0);
	 fclose(fp);

}
void FindFile(TCHAR * Path)
{	

	TCHAR Suffix[5]=L"\\*.*";
	
	TCHAR PathOut[256];
	wcscpy(PathOut,Path);
	wcscat(PathOut,L"\\");

	TCHAR * cp = Path;
	TCHAR p[256];
	wcscpy(p,Path);
	wcscat(p,L"\\*.*");  
	 	
	WIN32_FIND_DATA FindFileData;
	HANDLE hFind;
	TCHAR *FilePathBuff = p;
	hFind = FindFirstFile(FilePathBuff, &FindFileData);	
	
	if((hFind = FindFirstFile(p, &FindFileData)) != INVALID_HANDLE_VALUE){
		do{
  			if(wcscmp(FindFileData.cFileName, L".") == 0 || wcscmp(FindFileData.cFileName, L"..") == 0){
				continue;
			}
				if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
				TCHAR * cp = FindFileData.cFileName;
				wchar_t p[256];
				wcscpy(p,Path);
				wcscat(p,L"\\");
				wcscat(p,FindFileData.cFileName);
				FindFile(p);
			}
			else{
				 setlocale(LC_ALL, "");//这是stdio的
				_tprintf(TEXT("%s%s\n"),PathOut,FindFileData.cFileName);
				wchar_t Pathtemp[256];
				wcscpy(Pathtemp,PathOut);
				wcscat(Pathtemp,FindFileData.cFileName);
				AnToUn(Pathtemp);
			}
		}while(FindNextFile(hFind, &FindFileData) != 0);
		FindClose(hFind);
	}
	
//fclose(fp);
}
void AnToUn(wchar_t * wszString)
  {
      // unicode to ansi
    //wchar_t* wszString = L"abcd1234你我他";
   //预转换,得到所需空间的大小,这次用的函数和上面名字相反
    int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
    //同上,分配空间要给'\0'留个空间
    char* szAnsi = new char[ansiLen + 1];
    //转换
   //unicode版对应的strlen是wcslen
    ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL);
    //最后加上'\0'
    szAnsi[ansiLen] = '\0';
	fwrite(szAnsi,ansiLen*sizeof(char),1,fp);
	fwrite("\n",1,1,fp);
 delete[] szAnsi;   
 szAnsi =NULL;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值