提示:在view开发中用到递归查找文件的方法
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、递归查找文件
头文件
#include <io.h>
#include <fstream>
#include <string>
#include <vector>
#include <iostream>
using namespace std
代码
void getAllFiles(string path, vector<string>& files) {
//文件句柄
long long hFile = 0;
//文件信息
struct _finddata_t fileinfo;
string p;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) {
do {
if ((fileinfo.attrib & _A_SUBDIR)) { //比较文件类型是否是文件夹
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) {
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
//递归搜索
getAllFiles(p.assign(path).append("\\").append(fileinfo.name), files);
}
}
else {
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1
_findclose(hFile);
}
}
调用
int main(int argc, char** argv)
{
vector<string> temp;
getAllFiles("J:\\faces\\test", temp,".jpg");
for (int i = 0; i < temp.size();++i )
{
cout << temp[i] << endl;
}
return 0;
}
二、查找特定文件
自己用于查找特定文件,对上面代码做了修改
void getAllFiles(string path, vector<string>& files, string str ,string& targetFile) {
//文件句柄
long long hFile = 0;
//文件信息
struct _finddata_t fileinfo;
string p;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) {
do {
if ((fileinfo.attrib & _A_SUBDIR)) { //比较文件类型是否是文件夹
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) {
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
//递归搜索
getAllFiles(p.assign(path).append("\\").append(fileinfo.name), files, str, targetFile);
}
}
else {
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
if (p.find(str) != string::npos)
{
targetFile = p;
}
}
} while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1
_findclose(hFile);
}
}
调用
CString strpath = dlgFile.GetFolderPath();
std::string path(CW2A(strpath.GetString()));
string str = ".dat";
vector<string> vec;
string targetPath;
getAllFiles(path, vec, str, targetPath);
奇怪的是我在删除了vec.push语句后竟然没有得到想要的结果。后面再议
2023年7月14日11:36:00更新:
另外还需要注意的是当vec是传引用的时候,vec才能存储所有的文件,这个还未细研究。
三、string和CString相互转换
一、string转CString
string str = "hello world";
CString cstr(str.c_str());
二、CString转string
CString theCStr = L"Hello C++";
std::string STDStr(CW2A(theCStr.GetString()));
四、substr()和find()函数的联合使用示例
string a = "123.456";
//al、ar分别为第一个浮点数的整数部分、小数部分
//截取字符串
string al = a.substr(0, a.find('.')); //al = "123"
string ar = a.substr(a.find('.') + 1); //ar = "456"
这个帖子的关于递归查找文件的方法还有待商榷。
今天想写的是对于十六进制txt文件的理解。
比如我用filesystem读文件模型,文件读成byte字符数组,用byte数组接收,然后转成string。在程序中一直按照string来处理。
【写到后面的时候突然发现有点不对,仔细看了代码发现byte数组转成string的时候,还用了转成16进制的方法。也就是强哥之前表述的16进制字符串。】
转换代码:
public static bytesToHex(byte[] bytes)
{
StringBuilder sb = new StringBuilder();
for(byte : bytes)
{
String temp = Interger.toHexString(0xFF & byte);
//如果是个位数
if(temp.length() < 2)
{
stringBuilder.append(0);
}
stringBuilder.append(temp.toUpperCase(Locale.ROOT));
}
return stringBuilder.toString();
}
下面来看怎么写成dat文件。
但是一开始我以为convert执行完的格式是dat呢,实际不是,convert执行出来的是orc文件格式。这个关于orc暂时先不管。compile执行的过程是将编译后的数据先写成txt文件,最后又转成dat格式。
那么先看怎么写成txt格式的。就是outputdataset.write().mode(SaveMode.Overwrite).txt(outputPath);
所以txt文件里写的就是16进制字符串。而其中出现的瓦片编号是直接可阅读的。是string,直接写入,虽然不是16进制字符串,但是和16进制字符串写在了一起。
txt是16进制string字符串直接写成txt的。
下面就是怎么写成dat文件的。
写dat文件之前是将dataset里面的16进制字符串string转换成byte数组,用的是hexToBytes()函数来处理的。
读成byte数组之后,再使用filesystem方法来写文件的。
以上就是数据不同格式
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。