主题:C++好手帮我改一下这个程序啊 问题多多 紧急啊~~~
#pragma warning (disable: 4786)//由于vc6.0对STL支持比较差
#include <iostream>//输入输出及其相关方法
#include <string>//字符串类std::string及其相关方法
#include <list>//STL链表类std::list<T>及其相关的方法
#include <windows.h>
#include<io.h>
#include<stdio.h>
using namespace std;//标识符的各种可见范围
int GetAllFileName(string strPath, list<string> &lsName);//strPath:申明了一个字符串变量strpath来传递一个文件名然后给这个变量然赋值
bool DelFile(list<string> &lsName, string strFilePath, string strFileName);
bool CreFile(string strFilePath, string strFileName);
void filesearch(string path,int layer)
{
struct _finddata_t filefind;
string curr=path+"\\*.*";
int done=0,i,handle;
if((handle=_findfirst(curr.c_str(),&filefind))==-1)
return;
while(!(done=_findnext(handle,&filefind)))
{
if(!strcmp(filefind.name,".."))
continue;
for(i=0;i<layer;i++)cout<<" - ";
if ((_A_SUBDIR==filefind.attrib))
{
cout<<filefind.name<<"(dir)"<<endl;
curr=path+"\\"+filefind.name;
filesearch(curr,layer+1);
}
else
{
cout<<curr.c_str()<<filefind.name<<endl;
}
}
_findclose(handle);
}
int main(int argc, char *argv[])//假设程序编译后产生abc.exe文件,在dos下以abc aaa形式执行
{
// 获取目录路径
cout << "请输入文件名:" << endl;
char szFilePath[MAX_PATH] = {0};
cin.getline(szFilePath, MAX_PATH);
// 获取所有指定目录下的文件名
list<string>::iterator iter;
list<string> lsName;
filesearch(szFilePath,0);
// 删除文件
int count = GetAllFileName(szFilePath, lsName);
cout << "请输入你要删除的文件名:" << endl;
char szDelFile[MAX_PATH] = {0};
cin.getline(szDelFile, MAX_PATH);
if (DelFile(lsName, szFilePath, szDelFile))
{
cout << "成功删除" << endl;
}
else
cout<<"文件不存在"<<endl;
// 创建文件
cout << "请输入你要创建的文件名:" << endl;
char szCreFile[MAX_PATH] = {0};
cin.getline(szCreFile, MAX_PATH);
if (CreFile(szFilePath, szCreFile))
{
cout << "创建成功" << 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() || 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;
}
#include <iostream>//输入输出及其相关方法
#include <string>//字符串类std::string及其相关方法
#include <list>//STL链表类std::list<T>及其相关的方法
#include <windows.h>
#include<io.h>
#include<stdio.h>
using namespace std;//标识符的各种可见范围
int GetAllFileName(string strPath, list<string> &lsName);//strPath:申明了一个字符串变量strpath来传递一个文件名然后给这个变量然赋值
bool DelFile(list<string> &lsName, string strFilePath, string strFileName);
bool CreFile(string strFilePath, string strFileName);
void filesearch(string path,int layer)
{
struct _finddata_t filefind;
string curr=path+"\\*.*";
int done=0,i,handle;
if((handle=_findfirst(curr.c_str(),&filefind))==-1)
return;
while(!(done=_findnext(handle,&filefind)))
{
if(!strcmp(filefind.name,".."))
continue;
for(i=0;i<layer;i++)cout<<" - ";
if ((_A_SUBDIR==filefind.attrib))
{
cout<<filefind.name<<"(dir)"<<endl;
curr=path+"\\"+filefind.name;
filesearch(curr,layer+1);
}
else
{
cout<<curr.c_str()<<filefind.name<<endl;
}
}
_findclose(handle);
}
int main(int argc, char *argv[])//假设程序编译后产生abc.exe文件,在dos下以abc aaa形式执行
{
// 获取目录路径
cout << "请输入文件名:" << endl;
char szFilePath[MAX_PATH] = {0};
cin.getline(szFilePath, MAX_PATH);
// 获取所有指定目录下的文件名
list<string>::iterator iter;
list<string> lsName;
filesearch(szFilePath,0);
// 删除文件
int count = GetAllFileName(szFilePath, lsName);
cout << "请输入你要删除的文件名:" << endl;
char szDelFile[MAX_PATH] = {0};
cin.getline(szDelFile, MAX_PATH);
if (DelFile(lsName, szFilePath, szDelFile))
{
cout << "成功删除" << endl;
}
else
cout<<"文件不存在"<<endl;
// 创建文件
cout << "请输入你要创建的文件名:" << endl;
char szCreFile[MAX_PATH] = {0};
cin.getline(szCreFile, MAX_PATH);
if (CreFile(szFilePath, szCreFile))
{
cout << "创建成功" << 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() || 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;
}