C++读取文件夹内所有文件路径和文件读写
今天想用vs2015实现一个对文件夹内所有文件进行写入数据进而改变哈希值,在博客上找了一些大神的代码,又进行了一下修改得以完成这个功能
代码块
#include "stdafx.h"
#include <stdio.h>
#include<iostream>
#include<vector>
#include <Windows.h>
#include <fstream>
#include <iterator>
#include <string>
#include <map>
using namespace std;
ofstream outfile;
void GetFiles(string path, vector<string> &filesPath, vector<string>& filesName)
{
WIN32_FIND_DATAA ffd;
memset(&ffd, 0, sizeof(ffd));
string pathOld= path;
path.append("\\*");
HANDLE hFind = FindFirstFileA(path.c_str(), &ffd);
do {
if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (!strcmp(ffd.cFileName, ".") || !strcmp(ffd.cFileName, ".."))
continue;
string newPath = pathOld;
newPath.append("\\").append(ffd.cFileName);
GetFiles(newPath, filesPath, filesName);
}
else
{
string filePath = pathOld;
filePath.append("\\").append(ffd.cFileName);
filesName.push_back(ffd.cFileName);
filesPath.push_back(filePath);
}
} while (FindNextFileA(hFind, &ffd) != 0);
FindClose(hFind);
}
void writeLog(string filePath,string text)
{
ifstream fin(filePath);
if (!fin)
{
cout << "文件不存在";
fin.close();
return;
}
outfile.open(filePath, ios::app);
if (!outfile) //检查文件是否正常打开//不是用于检查文件是否存在
{
cout << "abc.txt can't open" << endl;
abort(); //打开失败,结束程序
}
else
{
outfile << text;
outfile.close();
}
}
int main()
{
std::vector<std::string> filePath;
std::vector<std::string> fileName;
GetFiles("C:\\Users\\MyFile", filePath, fileName);
for (int i = 0; i < filePath.size(); i++)
{
cout << filePath[i] << endl;
}
for (int i = 0; i < fileName.size(); i++)
{
cout << fileName[i] << endl;
}
string text="写入内容";
for (int i = 0; i < filePath.size(); i++)
{
writeLog(filePath[i], text);
}
return 0;
}