#include<iostream>
#include <shellapi.h>
#pragma comment(lib, "shell32.lib")
SHFILEOPSTRUCT fop;
ZeroMemory(&fop, sizeof fop);
fop.wFunc = FO_COPY;
fop.pFrom = _T("D:\\\0");
fop.pTo =_T("C:\\beifen\0") ;
SHFileOperation(&fop);
ZeroMemory(&fop, sizeof fop);
求大神
有什么办法可以复制D盘根目录的文件夹和文件
4 个解决方案
#1
求大神!!!别的函数也可以
#3
仅供参考:
void dfsFolder(string folderPath)
{
struct _finddata_t FileInfo;
string strfind = folderPath + "\\*";
long Handle = _findfirst(strfind.c_str(), &FileInfo);
if (Handle == -1L)
{
cerr << "can not match the folder path" << endl;
exit(-1);
}
do{ //判断是否有子目录
if (FileInfo.attrib & _A_SUBDIR)
{ //这个语句很重要
if( (strcmp(FileInfo.name,".") != 0 ) &&(strcmp(FileInfo.name,"..") != 0))
{
string newPath = folderPath + "\\" + FileInfo.name;
dfsFolder(newPath);
cout << FileInfo.name << endl;
}
}
else
{
//cout << folderPath << "\\" << FileInfo.name << " ";
cout << FileInfo.name << endl;
}
}while (_findnext(Handle, &FileInfo) == 0);
_findclose(Handle);
//fout.close();
}
bool GetDiskName(void)
{
int DSLength = GetLogicalDriveStrings(0,NULL); //通过GetLogicalDriveStrings()函数获取所有驱动器字符串信息长度。
char* DStr = new char[30];//用获取的长度在堆区创建一个c风格的字符串数组
memset(DStr, 0, sizeof(DStr));
GetLogicalDriveStrings(30,(LPTSTR)DStr); //通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的信息。
int DType;
int si=0;
for(int i=0;i<DSLength/4;++i)
//为了显示每个驱动器的状态,则通过循环输出实现,由于DStr内部保存的数据是A:\NULLB:\NULLC:\NULL,这样的信息,所以DSLength/4可以获得具体大循环范围
{
char dir[5]= "";
//{DStr[si],':','\\'};
sprintf(dir,"%c:\\",DStr[si]);
DType = GetDriveType((LPCWSTR)DStr+i*4);
//GetDriveType函数,可以获取驱动器类型,参数为驱动器的根目录
if(DType == DRIVE_FIXED )
{
printf("%c",*dir);
printf("硬盘\n");
}
else if ( DRIVE_REMOVABLE == DType)
{
printf("%c移动硬盘\n",*dir);
}
si+=4;
}
//system("pause");
return true;
}
#4
我想知道是我路径写错了, 还是他不支持根目录?
#1
求大神!!!别的函数也可以
#2
#3
仅供参考:
void dfsFolder(string folderPath)
{
struct _finddata_t FileInfo;
string strfind = folderPath + "\\*";
long Handle = _findfirst(strfind.c_str(), &FileInfo);
if (Handle == -1L)
{
cerr << "can not match the folder path" << endl;
exit(-1);
}
do{ //判断是否有子目录
if (FileInfo.attrib & _A_SUBDIR)
{ //这个语句很重要
if( (strcmp(FileInfo.name,".") != 0 ) &&(strcmp(FileInfo.name,"..") != 0))
{
string newPath = folderPath + "\\" + FileInfo.name;
dfsFolder(newPath);
cout << FileInfo.name << endl;
}
}
else
{
//cout << folderPath << "\\" << FileInfo.name << " ";
cout << FileInfo.name << endl;
}
}while (_findnext(Handle, &FileInfo) == 0);
_findclose(Handle);
//fout.close();
}
bool GetDiskName(void)
{
int DSLength = GetLogicalDriveStrings(0,NULL); //通过GetLogicalDriveStrings()函数获取所有驱动器字符串信息长度。
char* DStr = new char[30];//用获取的长度在堆区创建一个c风格的字符串数组
memset(DStr, 0, sizeof(DStr));
GetLogicalDriveStrings(30,(LPTSTR)DStr); //通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的信息。
int DType;
int si=0;
for(int i=0;i<DSLength/4;++i)
//为了显示每个驱动器的状态,则通过循环输出实现,由于DStr内部保存的数据是A:\NULLB:\NULLC:\NULL,这样的信息,所以DSLength/4可以获得具体大循环范围
{
char dir[5]= "";
//{DStr[si],':','\\'};
sprintf(dir,"%c:\\",DStr[si]);
DType = GetDriveType((LPCWSTR)DStr+i*4);
//GetDriveType函数,可以获取驱动器类型,参数为驱动器的根目录
if(DType == DRIVE_FIXED )
{
printf("%c",*dir);
printf("硬盘\n");
}
else if ( DRIVE_REMOVABLE == DType)
{
printf("%c移动硬盘\n",*dir);
}
si+=4;
}
//system("pause");
return true;
}
#4
我想知道是我路径写错了, 还是他不支持根目录?