C++实现从一个文件夹中读出所有txt文件

前段时间做项目需要读取一个文件夹里面所有的txt文件,查询资料后得到以下实现方法:
首先了解一下这个结构体
struct _finddata_t {
    unsigned    attrib;
    time_t      time_create;   
    time_t      time_access;   
    time_t      time_write;
    _fsize_t    size;
    char        name[260];
};
其中各成员变量的含义如下:
unsigned atrrib: 文件属性的存储位置。它存储一个unsigned单元,用于表示文件的属性。文件属性是用位表示的,主要有以下一些:_A_ARCH(存档)、 _A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。这些都是在中定义的宏,可以直接使用,而本身的意义其实是一个无符号整型(只不过这个整型应该是2的几次幂,从而保证只有一位为 1,而其他位为0)。既然是位表示,那么当一个文件有多个属性时,它往往是通过位或的方式,来得到几个属性的综合。例如只读+隐藏+系统属性,应该为:_A_HIDDEN | _A_RDONLY | _A_SYSTEM 。
time_t time_create: 文件创建时间。
time_t time_access: 文件最后一次被访问的时间。
time_t time_write: 文件最后一次被修改的时间。
_fsize_t size: 文件的大小。
char name [_MAX_FNAME ]:文件的文件名。这里的_MAX_FNAME是一个常量宏,它在头文件中被定义,表示的是文件名的最大长度。

查找文件需要用到_findfirst 和 _findnext 两个函数,这两个函数包含在io.h库中
1、_findfirst函数:long _findfirst(const char *, struct _finddata_t *);
 
第一个参数为文件名,可以用"*.*"来查找所有文件,也可以用"*.cpp"来查找.cpp文件。第二个参数是_finddata_t结构体指针。若查找成功,返回文件句柄,若失败,返回-1。
 
 
2、_findnext函数:int _findnext(long, struct _finddata_t *);
 
第一个参数为文件句柄,第二个参数同样为_finddata_t结构体指针。若查找成功,返回0,失败返回-1。
 
3、_findclose()函数:int _findclose(long);
 
只有一个参数,文件句柄。若关闭成功返回0,失败返回-1。

代码及实现
需要输出的文件

运行结果

代码


#include <iostream>
#include <string>
#include <fstream>
#include <io.h>

using namespace std

void GetLineAndPrint(string in_name)
{
ifstream fin(in_name);
if (!fin)
{
cerr << "open file error" << endl;
exit(-1);
}
string str;
while (getline(fin, str))
{
cout << str << endl;
}
}

int main()
{
struct _finddata_t fileinfo;
string in_path;
string in_name;
cout << "输入文件夹路径:" ;
cin >> in_path;
string curr = in_path + "\\*.txt";
long handle;
if ((handle = _findfirst(curr.c_str(), &fileinfo)) == -1L)
{
cout << "没有找到匹配文件!" << endl;
return 0;
}
else
{
in_name = in_path + "\\" + fileinfo.name;
GetLineAndPrint(in_name);
while (!(_findnext(handle, &fileinfo)))
{
in_name = in_path + "\\" + fileinfo.name;
GetLineAndPrint(in_name);
}
_findclose(handle);
}
}


注:代码在vs2017中编译通过。

参考资料:

http://blog.csdn.net/black__blood/article/details/7168740

http://www.cnblogs.com/ranjiewen/p/5960976.html#top

原文地址:https://www.cnblogs.com/bigyang/p/8547038.html

时间: 2024-10-07 06:49:03

C++实现从一个文件夹中读出所有txt文件的相关文章

在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM

题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在"D:\java"文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 myPackage 包中创建一个YMD类,该类具有计算今年的年份.可以输出一个带有年月日的字符串的功能.设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名.年龄.出生日期.程序使用YMD的方法来计算年龄. 主要考包的运用 用到java.util.Calendar

使用ftp读取文件夹中的多个文件,并删除

public class FTPUtils { private static final Logger LOG = LoggerFactory.getLogger(FTPUtils.class); /** * 获取FTPClient对象 * * @param ftpHost FTP主机服务器 * @param ftpPassword FTP 登录密码 * @param ftpUserName FTP登录用户名 * @param ftpPort FTP端口 默认为21 * @return */ p

[003]从文件夹中读取所有图片或者文件

从javascript的角度上看,因为语言的关系,是不能从文件夹读取文件的. 但是,我们可以同activeX的方法来获取后,传递给javascript使用. 详细代码如下: 1 var fileNameArray = []; 2 function searchFiles1(dir){ 3 if (dir.substr(dir.length-1, 1) != "\\" && dir.substr(dir.length-1, 1) != "/") 4 d

用字符流实现每个文件夹中创建包含所有文件信息的readme.txt

1 package com.readme; 2 3 import java.io.BufferedWriter; 4 import java.io.File; 5 import java.io.FileWriter; 6 import java.io.IOException; 7 import java.text.SimpleDateFormat; 8 import java.util.Date; 9 import java.util.Scanner; 10 11 /** 12 * @autho

.gitignore 规则写法 - 在已忽略文件夹中不忽略指定文件、文件夹【注意项】

1. 在已忽略文件夹中不忽略指定文件夹 /node_modules/* !/node_modules/layer/ 2. 在已忽略文件夹中不忽略指定文件 /node_modules/* !/node_modules/layer/layer.js [注意项]注意写法 要忽略的文件夹一定要结尾 /* ,否则不忽略规则将无法生效 3. 其他规则写法 (附) 以斜杠"/"开头表示目录: 以星号"*"通配多个字符: 以问号"?"通配单个字符 以方括号&qu

删除指定文件夹中除保留的文件外的所有文件批处理 删除指定文件夹下的空文件夹,包括子目录批处理

删除指定文件夹中除保留的文件外的所有文件批处理 @echo off set "ext= sln csproj" for /f "delims=" %%a in ('dir /b/s/a-d *.*') do ( set .= if /i not "%%~nxa"=="%~nx0" ( for %%i in (%ext%) do if /i "%%~xa"==".%%i" set .=.

VBA读取可选择文件夹下可选择txt文件内容

Sub OneTxt() '打开一个txt文件 Dim Filename As Variant, extLine&, mArr() As String Dim i%, j% ChDir ThisWorkbook.Path Filename = Application.GetOpenFilename("Text Files (*.txt), *.txt", , "请选取档案", , MultiSelect:=True) j = 1 For k = 1 To U

perl怎么拷贝一个文件到另一个文件夹中或者怎么拷贝文件夹到另一个文件夹

File::Copy 主要提供了copy和move函数#!/usr/bin/perluse strict; use warnings; use File::Copy; my $filein=$ARGV[0]; my $fileout=$ARGV[1];#copy($file1, $dir1);将文件$file1复制到文件夹$dir1中:copy($filein,$fileout) or die "copy $filein to $fileout failed\n"; #move($fi

ubuntu 用shell脚本实现将当前文件夹下全部文件夹中的某一类文件复制到同一文件夹下

当前文件夹下有一些文件和文件夹,当中每一个文件夹里都有若干.txt文件. 如今要求在当前文件夹创建一个新文件夹all,且将那些文件夹全部.txt文件 都复制到文件夹all.在ubuntu12.04的shell脚本实现例如以下: #!/bin/sh # 提示信息 echo "start:" # 定义变量 dst=all pst=.txt # 拷贝文件到目标目录 if [ -d ${dst} ] then echo "${dst} existed" else echo