什么也不用说,直接看代码
#include "stdafx.h"
#include <windows.h>
void TcharToChar(const TCHAR * tchar, char * _char)
{
int iLength;
//获取字节长度
iLength = WideCharToMultiByte(CP_ACP, 0, tchar, -1, NULL, 0, NULL, NULL);
//将tchar值赋给_char
WideCharToMultiByte(CP_ACP, 0, tchar, -1, _char, iLength, NULL, NULL);
}
//同上
void CharToTchar(const char * _char, TCHAR * tchar)
{
int iLength;
iLength = MultiByteToWideChar(CP_ACP, 0, _char, strlen(_char) + 1, NULL, 0);
MultiByteToWideChar(CP_ACP, 0, _char, strlen(_char) + 1, tchar, iLength);
}
int GetFileName(char * fName)
{
OPENFILENAME ofn;
TCHAR szOpenFileNames[80 * MAX_PATH];
TCHAR szPath[MAX_PATH];
TCHAR szFileName[80 * MAX_PATH];
TCHAR* p;
int nLen = 0;
ZeroMemory(&ofn, sizeof(ofn));
ofn.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT;
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szOpenFileNames;
ofn.nMaxFile = sizeof(szOpenFileNames);
ofn.lpstrFile[0] = '\0';
ofn.lpstrFilter = TEXT("All Files(*.*)\0*.*\0");
if (GetOpenFileName(&ofn))
{
//把第一个文件名前的复制到szPath,即:
//如果只选了一个文件,就复制到最后一个'\'
//如果选了多个文件,就复制到第一个NULL字符
lstrcpyn(szPath, szOpenFileNames, ofn.nFileOffset);
//当只选了一个文件时,下面这个NULL字符是必需的.
//这里不区别对待选了一个和多个文件的情况
szPath[ofn.nFileOffset] = '\0';
nLen = lstrlen(szPath);
if (szPath[nLen - 1] != '\\') //如果选了多个文件,则必须加上'\\'
{
lstrcat(szPath, TEXT("\\"));
}
p = szOpenFileNames + ofn.nFileOffset; //把指针移到第一个文件
ZeroMemory(szFileName, sizeof(szFileName));
//while (*p) // 所有
//{
// lstrcat(szFileName, szPath); //给文件名加上路径
// lstrcat(szFileName, p); //加上文件名
// lstrcat(szFileName, TEXT("\n")); //换行
// p += lstrlen(p) + 1; //移至下一个文件
//}
if (*p) // 第一个名字
{
lstrcat(szFileName, szPath); //给文件名加上路径
lstrcat(szFileName, p); //加上文件名
lstrcat(szFileName, TEXT("\0")); //换行
TcharToChar(szFileName, fName);
}
MessageBox(NULL, szFileName, TEXT("MultiSelect"), MB_OK);
}
}
int main()
{
char fName[MAX_PATH];
int len = 0;
for (int i = 0; i < 10; i++)
{
GetFileName(fName);
printf("name = %s\n", fName);
}
return 0;
}