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

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. 配置supervisor管理beego应用

    一.golang.beego等环境安装与配置 二.supervisor安装 github项目地址:https://github.com/Supervisor/supervisor 克隆项目:git c ...

  2. canvas-star2.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 安装 kubernetes v1.11.1

    kubernetes 版本 v1.11.1 系统版本:Centos 7.4 3.10.0-693.el7.x86_64 master: 192.168.0.205 node1: 192.168.0.2 ...

  4. Html/Css 初步认识笔记

    1.什么是 HTML ? HTML(HyperText Markup Language) 的学名是超文本标记语言. 标记用来表示网页内容要如何显示,自身不显示 .<我就是标记> 标记成对出 ...

  5. JS输入框正则校验

    1. 开发中需要对etl组件统一进行input输入框校验,允许为空,可以不校验,默认校验长度和特殊字符,代码如下,记录以备复用. /** * 数据值校验工具类 */ var checkService ...

  6. mysql5.7 安装和多源复制实践

    MySQL 5.7发布后,在复制方面有了很大的改进和提升.比如开始支持多源复制(multi-source)以及真正的支持多线程复制了.多源复制可以使用基于二进制日子的复制或者基于事务的复制.下面我们说 ...

  7. JMeter 查看结果树监听器响应数据中文显示乱码解决方法

    查看结果树监听器响应数据中文显示乱码解决方法 by:授客 QQ:1033553122   问题描述 使用监听器-查看结果树(View Results Tree Listener)过程中发现,响应数据面 ...

  8. loadrunner 场景设计-目标场景设计

    场景设计-目标场景设计 by:授客 QQ:1033553122 A.   概述 Goals Types for Goal-Oriented Scenarios 在以目标为向导的场景中,定义你想实现的测 ...

  9. Angular基础(六) DI

      一.依赖注入 a) 如果模块A需要依赖模块B,通常的做法是在A中导入B,import{B} from ‘B’,但有一些场合需要解除这种直接依赖,比如单元测试时需要mock一个B对象.还有时要创建B ...

  10. 基于bootstrap的双日历插件 daterangepicker

    我遇到需求是要求我将daterangepicker的一个双日期选择格式修改成两个单日期格式的日期选择框(方便手机端显示),要求如下: 1.两个单日期格式分别为开始日期和结束日期 2.开始日期可选择范围 ...