#include <iostream>
#include <string>
#include <list>
#include <windows.h>
using namespace std;
int GetAllFileName(string strPath, list<string> &lsName);
bool DelFile(list<string> &lsName, string strFilePath, string strFileName);
bool CreFile(string strFilePath, string strFileName);
int main(int argc, char *argv[])
{
// 获取目录路径
cout << "please enter a directory name:" << endl;
char szFilePath[MAX_PATH] = {0};
cin.getline(szFilePath, MAX_PATH);
// 获取所有指定目录下的文件名
list<string>::iterator iter;
list<string> lsName;
int count = GetAllFileName(szFilePath, lsName);
for (iter = lsName.begin(); iter != lsName.end(); ++iter)
{
cout << *iter << endl;
}
// 删除文件
cout << "please input file name for delete:" << endl;
char szDelFile[MAX_PATH] = {0};
cin.getline(szDelFile, MAX_PATH);
if (DelFile(lsName, szFilePath, szDelFile))
{
cout << "delete file success" << endl;
}
// 创建文件
cout << "please input file name for create:" << endl;
char szCreFile[MAX_PATH] = {0};
cin.getline(szCreFile, MAX_PATH);
if (CreFile(szFilePath, szCreFile))
{
cout << "create file success" << endl;
}
return 0;
}
int GetAllFileName(string strPath, list<string> &lsName)
{
if (strPath.empty())
{
return -1;
}
int nFileCount = 0;
WIN32_FIND_DATA finder;
string strFile = strPath + "\\*.*";
HANDLE hFile = FindFirstFile(strFile.c_str(), &finder);
if (INVALID_HANDLE_VALUE != hFile)
{
do
{
lsName.push_back(finder.cFileName);
nFileCount++;
}while(FindNextFile(hFile, &finder) != 0);
}
FindClose(hFile);
return nFileCount-2; // 减去当前目录和上级目录
}
bool DelFile(list<string> &lsName, string strFilePath, string strFileName)
{
bool bRet = false;
if (lsName.empty() || strFilePath.empty() || strFileName.empty())
{
return bRet;
}
list<string>::iterator iter;
for (iter = lsName.begin(); iter != lsName.end(); ++iter)
{
if (strFileName.compare(*iter) == 0)
{
string strTemp = strFilePath + "\\" + strFileName;
if (DeleteFile(strTemp.c_str()))
{
lsName.erase(iter); // 删除list容器中的文件名
bRet = true;
break;
}
}
}
return bRet;
}
bool CreFile(string strFilePath, string strFileName)
{
bool bRet = false;
if (strFilePath.empty() || strFileName.empty())
{
return bRet;
}
string strTemp = strFilePath + "\\" + strFileName;
if (CreateFile(strTemp.c_str(),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CREATE_NEW,
NULL,
NULL) != INVALID_HANDLE_VALUE)
{
bRet = true;
}
return bRet;
}
09-20
09-20