有很多的时候 会出现没有用的优盘路径 如果代码中写的是绝对路径 就有可能读不到优盘的内容 ,以下代码就是可以解决这样的问题  我已经封装成一个类

upanpath.h

#ifndef UPANPATH_H
#define UPANPATH_H #include <dirent.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>
#include <vector>
#include <iostream>
#include <unistd.h> using namespace std; class UPanPath
{
public:
UPanPath(string file_name,string UPan_name,string target_file_name);
~UPanPath();
string fileName;
string UPanName;
string targetFileName;
vector<string> getFoldernames( const string dir_name, const string filter1);
bool dirIsExit( const string dir_name );
string getFilePath();
};
#define NOROBOT "no find ROBOT file"
#define NOEFFECTIVE "no find effective file"
#endif // UPANPATH_H

upanpath.cpp

#include "upanpath.h"

UPanPath::UPanPath(string file_name,string UPan_name,string target_file_name)
{
this->fileName = file_name ;
this->UPanName = UPan_name;
this->targetFileName = target_file_name;
}
/* Get all the files in the folder dir_name , do not show the directories ! */
bool UPanPath::dirIsExit(const string dir_name)
{
// check the parameter !
if( "" == dir_name )
{
cout<<" dir_name is null ! "<<endl;
return false;
}
// check if dir_name is a valid dir
struct stat s;
lstat( dir_name.c_str() , &s );
if( ! S_ISDIR( s.st_mode ) )
{
cout<<dir_name << " is not a valid directory !"<<endl;
return false;
}
return true; }
/* Get all the files in the folder dir_name , do not show the directories !
* 此函数可以得到指定目录下的所有文件和文件夹名,可以对其进行筛选,只要文件,然后再根据两个过滤器依次进行筛选,得到指定的文件。
*/
vector<string> UPanPath::getFoldernames( const string dir_name, const string filter)
{
vector<string> dirs;
// check the parameter !
if( "" == dir_name )
{
cout<<" dir_name is null ! "<<endl;
return dirs;
} // check if dir_name is a valid dir
struct stat s;
lstat( dir_name.c_str() , &s );
if( ! S_ISDIR( s.st_mode ) )
{
cout<<dir_name << " is not a valid directory !"<<endl;
return dirs;
} struct dirent * filename; // return value for readdir()
DIR * dir; // return value for opendir()
dir = opendir( dir_name.c_str() );
if( NULL == dir )
{
cout<<"Can not open directory "<<dir_name<<endl;
return dirs;
}
cout<<"Open the directory successfully!"<<endl; string path;
if( dir_name.substr(dir_name.length()-, ) != "/" )
path = dir_name + "/";
else
path = dir_name; struct stat s_buf;
string dir_tmp;
/* read all the files in the dir ~ */
while( ( filename = readdir(dir) ) != NULL )
{
dir_tmp = filename ->d_name;
// get rid of "." and ".."
if( "." == dir_tmp || ".." == dir_tmp )
continue; /*获取文件信息,把信息放到s_buf中*/
stat( (path + dir_tmp).c_str(), &s_buf );
/*判断是否目录*/
if( !S_ISDIR(s_buf.st_mode) )
continue; if("" != filter)
{
if((int)dir_tmp.find(filter) >= )
dirs.push_back(dir_tmp);
}
else
dirs.push_back(dir_tmp); }
return dirs;
}
string UPanPath::getFilePath()
{
vector<string> dir_f = UPanPath::getFoldernames(UPanPath::fileName,UPanPath::UPanName);
cout << "文件的个数:"<<dir_f.size() << endl;
string faces_dir = "";
vector<string> upan_name ;
for(int i=; i< dir_f.size(); i++)
{
cout << "dir_f[" << i << "]: " << dir_f[i] << endl;
string dir_tmp = UPanPath::fileName; //+"/"+ dir_f[i];
dir_tmp += "/";
dir_tmp += dir_f[i];
dir_tmp += "/";
dir_tmp += UPanPath::targetFileName;
cout << dir_tmp <<endl;
if( != system( ("cd " + dir_tmp).c_str() ) )
{
if( == system( ("sudo rm -rf " + dir_tmp).c_str() ) )
cout << "Delet invalid Upan folder [ " << dir_tmp << " ] successfully..." << endl;
else
cout << "Failed to delete invalid Upan folder [ " << dir_tmp << " ] ..." << endl;
}
else
upan_name.push_back(dir_f[i]);
} int len = upan_name.size();
if ( == len )
{
cout << "Don't find the Upan [ ROBOT ], please insert the Upan first ..." << endl;
return NOROBOT;
} else
{
for (int i=; i<len; i++)
{
string dir_tmp = UPanPath::fileName;
dir_tmp += "/";
dir_tmp += upan_name[i];
dir_tmp += "/";
dir_tmp += UPanPath::targetFileName;
cout << dir_tmp <<endl;
if(UPanPath::dirIsExit(dir_tmp))
{
faces_dir = dir_tmp;
break;
}
}
if("" == faces_dir)
{
cout << "Don't find the folder [ faces ] in the Upan ..." << endl;
return NOEFFECTIVE;
} else
{
cout << "Find the Upan faces folder [ " << faces_dir << " ] ..." << endl;
return faces_dir;
}
}
}
UPanPath::~UPanPath()
{
cout << "析构函数"<< endl;
}

main.cpp

#include <QCoreApplication>

#include "upanpath.h"

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); UPanPath *P = new UPanPath("/media/alvin","ROBOT","faces");
string FilePath = P->getFilePath();
cout << "effective file path :" << FilePath << endl; return a.exec();
}

可以根据函数的返回值的 不同确定什么原因导致读取失败。

ubuntu 系统判断优盘的指定文件存在的更多相关文章

  1. 服务 在初始化安装时发生异常:System.IO.FileNotFoundException: "file:///D:\testService"未能加载文件或程序集。系统找不到指定文件。

    @echo.@if exist "%windir%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" goto INSTALL ...

  2. XX.exe 系统找不到指定文件

    错误:unable to start ... XX.exe 系统找不到指定文件 今天调试一个项目,关于泊松融合的,项目名叫PoissonEditing,编译通过之后一直再报错,找不到PoissonEd ...

  3. Could not load file or assembly ‘ Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342’ or one of its dependencies系统找不到指定文件 处理方法

    前些天做EF Model-First测试,开发环境为VS2013,数据库为Oracle 11g.所有东西都装好数据模型已经建立后准备执行“根据模型生成数据库”命令时,出现:Could not load ...

  4. 如何解决Visual Studio2010 编译时提示系统找不到指定文件问题

    前一段时间,开始使用vs2010编写程序,可是在编译的时候总是报错,提示系统找不到指定文件,导致无法正常运行程序,花了好久时间终于找到原因解决,是因为常规的输出目录 要与链接的常规的输出文件要相对应. ...

  5. MVC出现错误:系统找不到指定文件(异常来自 HRSULT:0x80070002)

    vs2013创建Web应用程序MVC出现错误:系统找不到指定文件(异常来自 HRSULT:0x80070002) 查到博客园VS2013新建Web Application时报错Exception fr ...

  6. Visual Studio 2013 错误系统找不到指定文件,0x80070002

    错误:Visual Studio 2013 按照成功后,可以创建空web项目,但不能建webform 和 mvc 项目. 提示系统找不到指定文件,0x80070002. 解决方式: Step1: Wi ...

  7. Windows下make clean指令错误[错误码2](系统找不到指定文件)的解决方案

    问题来源 因为笔者想用GCC编译器进行Windows下的C语言编程,安装了Mingw-w64的x86_64-posix-seh版本,并按照Visual Studio Code官方的教程,将Mingw- ...

  8. Could not load file or assembly 'System.ServiceModel.DomainServices.Hosting'.系统找不到指定文件

    项目部署到服务器后出现如下错误信息: Parser Error Message: Could not load file or assembly 'System.ServiceModel.Domain ...

  9. .netCore 反射 :Could not load file or assembly 系统找不到指定文件

    “System.IO.FileNotFoundException:“Could not load file or assembly 'ClassLibrary2, Culture=neutral, P ...

随机推荐

  1. IOC容器的创建

    一.IOC容器创建方式 Ioc容器的创建时通过ApplicationContext接口的相关实现类进行的. 如上图所示:有三种创建IOC容器的方式. ClassPathXmlApplicationCo ...

  2. echarts环形图,自定义说明文字

    一.代码 app.title = '已安装通讯盒电站统计'; option = { backgroundColor: '#0f0f31',//#0f0f31 title: { show:true, x ...

  3. JS如何判断一个对象是否为空、是否有某个属性

    一.js判断一个对象是否为空 方法一: let obj1 = {} let obj2 = {a:1} function empty(obj){ for (let key in obj){ return ...

  4. C语言字符串读入函数笔记

    gets(str)函数和scanf("%s",str)区别: 转自:https://zhidao.baidu.com/question/290403568.html 二者都是从终端 ...

  5. php获取指定月份月初和月末的时间戳

    获取指定月份的开始时间戳和结束时间戳,只需传入年月即可(2018-01,2018-1两种格式都可以) $data['sel_time'] = '2018-11'; $data['begin_time' ...

  6. Layui tree 下拉菜单树

    1.效果: 2.html  代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  7. GitHub使用SSHkey进行连接

    SSH key的配置基本是我们使用git必备的配置,配置好可以避免频繁的在git push或者git pull的时候输入账号和密码 本来我的SSH key早就配置好了,结果他不起作用了,那就在配置一次 ...

  8. 【工具相关】ionic-通过nmp安装最新版本的 cordova 和 ionic

    一,命令行下输入: sudo npm install -g cordova ionic 用来安装最新版本的cordova和ionic. 如下图所示: 二,等待一下,如下图所示. 三,用命令 npm u ...

  9. 【读书笔记】iOS-微信公众平台开发最佳实践

    一,微信是由腾讯公司广州研发中心产品团队开发,该团队经理张小龙被称为“微信之父”,公司总裁马化腾确定该产品名称为“微信”. 二,常见问题及解决方案. 1,请求URL超时. 这种情况一般是由于服务器网速 ...

  10. Apex 的异常处理

    Apex 中的异常处理 在 Apex 中,和其他语言类似,对于异常处理通常使用 try.catch.finally.throw 等关键字. 对于每一个 try 代码段,必须要有至少一个 catch 或 ...