新手求教 复制文件路径的问题

时间:2021-12-30 21:00:48
	
#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


引用 2 楼 dustpg 的回复:
windows api copy file


我想知道是我路径写错了, 还是他不支持根目录?

#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


引用 2 楼 dustpg 的回复:
windows api copy file


我想知道是我路径写错了, 还是他不支持根目录?