c++ 读取文件夹里的每个文件并复制到另一个文件夹

时间:2022-09-01 21:03:37
大家好,
想求一个 c++ 程序,希望能为尽量有详细的注释。
输入一个文件夹路径,读取文件夹里的所有文本文件,并且输出每个文件内容,然后把所有的文件转移到另一个文件夹下。就是最后读取文件夹下为空,转到的的另一个文件夹里包含了所有文本文件。
谢谢~

8 个解决方案

#1


其实就是遍历把文件读出来

再把文件夹名字改了,就相当于移到另一个文件夹了。

#2


需要时保留原来的文件夹。

有没有代码呢? 我是刚学c++,还从来没写过读取文件夹的程序。
谢谢

#3


P.S.标准C++本身不能创建文件夹,但不同编译器本身对这个功能都做了扩展,VC使用 _mkdir("mydir")函数来创建(#include <direct.h>),TC使用mkdir("mydir")来创建(#include <dir.h>)。
如果只是创建文件夹,还可以利用system("md mydir")函数来解决;

这个其实是一个老问题了:
http://topic.csdn.net/t/20061017/23/5089903.html
这里有解决方案,
方法就是依次打开文件、读取文件、输出文件、关闭文件
循环往复。

#4


对不起, 没太看懂。

读取文件名的方法是wfd.cFileName , 那读取文件内容的方法是什么呢?

可不可以用fstream 的getline那样一行一行读呢?
谢谢

#5


主要目的是把一个文件夹的内容考到令一个文件下的话,我知道一个函数很好用
SHFileOperation,举个列子:

#include<string.h>
#include<afx.h>
#include<shellapi.h>
void main()
{
char   pFrom[256];  
CString path = "D:\\VC" ;  //源目录
CString newpath = "D:\\DrillData" ;         //目标目录
memset(pFrom,   0x00,   256);   
strcpy(pFrom,   path);   //   第一个文件   
char   pTo[256];   
memset(pTo,   0x00,   256);  
strcpy(pTo,   newpath);   //   第一个文件   
SHFILEOPSTRUCT       sfo;       
sfo.hwnd = NULL;       
sfo.wFunc = FO_MOVE;       
sfo.pFrom = pFrom; 
sfo.pTo = pTo;         
sfo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;       

SHFileOperation(&sfo);
}

#6


引用 4 楼 jinli218 的回复:
对不起, 没太看懂。

读取文件名的方法是wfd.cFileName , 那读取文件内容的方法是什么呢?

可不可以用fstream 的getline那样一行一行读呢?
谢谢

就是getling,
如果只是复制的话,用binary逐字节读取、输出。

#7


openfile
readfile
writefile
movefile
findfirstfile
findnextfile
fildclose

#8


复制文件
#include <stdio.h>  
  
const char* src_name   = "1.mp3";  
const char* dest_name = "2.mp3";  
  
int main()  
{  
    FILE *src_fp;     
    if ((src_fp = fopen(src_name, "rb")) == NULL)  
    {     
        printf("fopen %s failed.\n", src_name);  
        return -1;  
    }  
  
    fseek(src_fp, 0L, SEEK_END);  
    int src_len = ftell(src_fp);  
    char *src_buf = new char[src_len];  
    fseek(src_fp, 0L, SEEK_SET);  
    fread(src_buf, src_len, 1, src_fp);  
    fclose(src_fp);  
  
    FILE *dest_fp;  
    if ((dest_fp = fopen(dest_name, "wb")) == NULL)  
    {     
        printf("fopen %s failed.\n", dest_name);  
        return -1;  
    }  
      
    fwrite(src_buf, src_len, 1, dest_fp);  
    fclose(dest_fp);  
  
    return 0;  
}  

#1


其实就是遍历把文件读出来

再把文件夹名字改了,就相当于移到另一个文件夹了。

#2


需要时保留原来的文件夹。

有没有代码呢? 我是刚学c++,还从来没写过读取文件夹的程序。
谢谢

#3


P.S.标准C++本身不能创建文件夹,但不同编译器本身对这个功能都做了扩展,VC使用 _mkdir("mydir")函数来创建(#include <direct.h>),TC使用mkdir("mydir")来创建(#include <dir.h>)。
如果只是创建文件夹,还可以利用system("md mydir")函数来解决;

这个其实是一个老问题了:
http://topic.csdn.net/t/20061017/23/5089903.html
这里有解决方案,
方法就是依次打开文件、读取文件、输出文件、关闭文件
循环往复。

#4


对不起, 没太看懂。

读取文件名的方法是wfd.cFileName , 那读取文件内容的方法是什么呢?

可不可以用fstream 的getline那样一行一行读呢?
谢谢

#5


主要目的是把一个文件夹的内容考到令一个文件下的话,我知道一个函数很好用
SHFileOperation,举个列子:

#include<string.h>
#include<afx.h>
#include<shellapi.h>
void main()
{
char   pFrom[256];  
CString path = "D:\\VC" ;  //源目录
CString newpath = "D:\\DrillData" ;         //目标目录
memset(pFrom,   0x00,   256);   
strcpy(pFrom,   path);   //   第一个文件   
char   pTo[256];   
memset(pTo,   0x00,   256);  
strcpy(pTo,   newpath);   //   第一个文件   
SHFILEOPSTRUCT       sfo;       
sfo.hwnd = NULL;       
sfo.wFunc = FO_MOVE;       
sfo.pFrom = pFrom; 
sfo.pTo = pTo;         
sfo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;       

SHFileOperation(&sfo);
}

#6


引用 4 楼 jinli218 的回复:
对不起, 没太看懂。

读取文件名的方法是wfd.cFileName , 那读取文件内容的方法是什么呢?

可不可以用fstream 的getline那样一行一行读呢?
谢谢

就是getling,
如果只是复制的话,用binary逐字节读取、输出。

#7


openfile
readfile
writefile
movefile
findfirstfile
findnextfile
fildclose

#8


复制文件
#include <stdio.h>  
  
const char* src_name   = "1.mp3";  
const char* dest_name = "2.mp3";  
  
int main()  
{  
    FILE *src_fp;     
    if ((src_fp = fopen(src_name, "rb")) == NULL)  
    {     
        printf("fopen %s failed.\n", src_name);  
        return -1;  
    }  
  
    fseek(src_fp, 0L, SEEK_END);  
    int src_len = ftell(src_fp);  
    char *src_buf = new char[src_len];  
    fseek(src_fp, 0L, SEEK_SET);  
    fread(src_buf, src_len, 1, src_fp);  
    fclose(src_fp);  
  
    FILE *dest_fp;  
    if ((dest_fp = fopen(dest_name, "wb")) == NULL)  
    {     
        printf("fopen %s failed.\n", dest_name);  
        return -1;  
    }  
      
    fwrite(src_buf, src_len, 1, dest_fp);  
    fclose(dest_fp);  
  
    return 0;  
}