zoukankan      html  css  js  c++  java
  • OE worldwind编码 遍历文件

    #include <io.h>        //for _finddata_t,_findfirst,_findnext,_findclose
    #include <direct.h> //for mkdir
    #include <iostream>
    #include <string>
    using namespace std;
    
    // 查询C:/windows文件夹下.exe文件的个数
    void traverse(string fileName = "C:/windows/*.exe", int exeNum = 0)
    {
        _finddata_t fileInfo;
        long handle = _findfirst(fileName.c_str(), &fileInfo);
    
        if (handle == -1L)
        {
            cerr << "failed to transfer files" << endl;
        }
    
        do 
        {
            exeNum ++;
            cout << fileInfo.name <<endl;
        } while (_findnext(handle, &fileInfo) == 0);
        cout << " .exe files' number:  " << exeNum << endl;
    
        _findclose(handle);
    }
    // 将字符串s中的所有的'/'替换成'\'
    string replaceChar(string &s){
    
        // 这里值得一提的是字符串里面的'\'得写成"\\"
    
        while(s.find("/") != string::npos){
            s.insert(s.find("/"),1,'/');
            s.replace(s.find("/"),2,"\\");
        }
        return s;
    }
    // 遍历一个路径下所有的文件(包括子文件夹里面的文件)
    int fileCnt=0;
    void dfsFolder(string srcPath /*= "C:/a"*/, string dstPath /*= "d:/root"*/)
    {
        _finddata_t FileInfo;
        string strfind = srcPath + "/*";
        long Handle = _findfirst(strfind.c_str(), &FileInfo);
    
        if (Handle == -1L)
        {
            cerr << "can not match the folder path" << endl;
            return ;
        }
        do{
            //判断是否有子目录
            if (FileInfo.attrib == _A_SUBDIR)    
            {
                // 由于系统在进入一个子目录时,匹配到的头两个文件(夹)
                // 是"."(当前目录),".."(上一层目录)。需要忽略掉这两种情况
                if( (strcmp(FileInfo.name,".") != 0 ) &&(strcmp(FileInfo.name,"..") != 0))   
                {
                    string newPath = srcPath + "/" + FileInfo.name;
                    dfsFolder(newPath,dstPath);
                }
            }
            else  
            {
                // 文件名字(包括后缀名)
                string nameExt(FileInfo.name);
                // 文件格式
                string ext = nameExt.substr(nameExt.rfind('.'));
                // 如果不是影像或者高程数据,则不予处理
                if (ext != ".tif" && ext != ".jpg" && ext != ".png" && ext != ".gif")
                    continue;
                //
                string rowStr = nameExt.substr(0,nameExt.length()-ext.length());
                //
                string columStr = srcPath.substr(srcPath.rfind('/')+1);
                // 中间变量,为了求“层数”
                string tmp = srcPath;
                tmp.erase(srcPath.rfind('/'));
                //
                string layerStr = tmp.substr(tmp.rfind('/')+1);
    
                // 将层、行、列转换成数值
                int layer = atoi(layerStr.c_str());
                int colum = atoi(columStr.c_str());
                int row = atoi(rowStr.c_str());
    
                float degreePerGrid = 180.0f/pow(2.0,layer);
                float longitude = colum * degreePerGrid-180;
                float latitude = row * degreePerGrid - 90;
    
                //string tileRootPath = tmp.erase(tmp.rfind('/'));
    
                // 创建存储影像和高程数据的文件夹
                if(-1 == _access((dstPath+"/image").c_str(),0))
                    system(("mkdir "+replaceChar(dstPath+"/image")).c_str());
                if(-1 == _access((dstPath+"/elevation").c_str(),0))
                    system(("mkdir "+replaceChar(dstPath+"/elevation")).c_str());
    
                // 行列不足4位(world wind瓦片文件的命名规则),左边用'0'补齐
                while(rowStr.size()<4)
                    rowStr.insert(0,1,'0');
                while(columStr.size()<4)
                    columStr.insert(0,1,'0');
                // 处理影像图片
                if( ".jpg" == ext )
                {
                    // 创建(层-行)文件夹,World Wind瓦片按照行优先存储
                    if(-1 == _access((dstPath+"/image/"+layerStr+"/"+rowStr).c_str(),0))
                        system(("mkdir "+replaceChar(dstPath+"/image/"+layerStr+"/"+rowStr)).c_str());
                    
                    string newName = rowStr+"_"+columStr;
                    string source = srcPath+"/"+nameExt;
                    string destination = dstPath+"/image/"+layerStr+"/"+rowStr+"/"+newName+ext;
    
                    // 下面将source和destination里面的'/'替换成'\'
                    // 因为要用到system调用,而system调用中的'/'的含义是选项设置,⊙﹏⊙b汗
                    replaceChar(source);
                    replaceChar(destination);
    
                    // 一时找不到好的复制文件的函数,只知道dos命令行的system调用
                    system(("copy "+source+" "+destination).c_str());
                    // rename函数可以用来移动文件,但是目标路径必须存在,否则此函数不起作用
                    //rename(source.c_str(),destination.c_str());
                }
                else if(".tif" == ext)
                {
                    if(-1 == _access((dstPath+"/elevation/"+layerStr+"/"+rowStr).c_str(),0))
                        system(("mkdir "+replaceChar(dstPath+"/elevation/"+layerStr+"/"+rowStr)).c_str());
                    fileCnt++;
                    string newName = rowStr+"_"+columStr;
                    string source = srcPath+"/"+nameExt;
                    string destination = dstPath+"/elevation/"+layerStr+"/"+rowStr+"/"+newName+ext;
    
                    replaceChar(source);
                    replaceChar(destination);
                    
                    //cout<<source<<endl<<destination<<endl;
                    system(("copy "+source+" "+destination).c_str());
                    
                    // rename函数可以用来移动文件,但是目标路径必须存在,否则此函数不起作用
                    //rename((fullPath+ext).c_str(),"d:/a/a.jpeg"/*newName.c_str()*/);
                }
            }
        }while (_findnext(Handle, &FileInfo) == 0);
    
        _findclose(Handle);
    
    }
    void main(int argc, char **argv)
    {
        //traverse();
    
        // 新建一个文件夹
        //system("mkdir c:\\a\\b");
    
        dfsFolder("d:/china","d:/root1");
    
        // 删除一个目录以及里面的子文件夹及其文件
        //system("rd /s /q d:\\a");
        system("pause");
    }
  • 相关阅读:
    zookeeper集群搭建
    kafka集群安装与配置
    Spring Task 定时任务配置与使用
    6.Spark SQL 及其DataFrame的基本操作
    10 期末大作业
    09 spark连接mysql数据库
    08 学生课程分数的Spark SQL分析
    从RDD创建DataFrame 07
    RDD 编程5
    05 RDD练习:词频统计
  • 原文地址:https://www.cnblogs.com/coolbear/p/3035090.html
Copyright © 2011-2022 走看看