常用函数-Linux文件操作

/************************************************************************
函数功能:寻找文件夹下的某格式文件
std::vector<string> &filelist            -- 文件名list
const char *basePath         -- 文件路径
string format             -- 文件格式 如 .xml
************************************************************************/
int readFileList(std::vector<string> &filelist, const char *basePath, string format)
 {
  DIR *dir;
  struct dirent *ptr;
  char base[1000];
  if ((dir = opendir(basePath)) == NULL)
  {
   perror("Open dir error...");
   exit(1);
  }
  while ((ptr = readdir(dir)) != NULL)
  {
   if (strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0)    ///current dir OR parrent dir
    continue;
   else if (ptr->d_type == 8)    //file
   {
    //printf("d_name:%s/%s\n",basePath,ptr->d_name);
    string temp = ptr->d_name;
    //cout  << temp << endl;
    string sub = temp.substr(temp.length() - 4, temp.length() - 1);
    //cout  << sub << endl;
    if (sub == format)
    {
     //string path = basePath;
     //path += "/";
     //path += ptr->d_name;
     filelist.push_back(ptr->d_name);
    }
   }
   else if (ptr->d_type == 10)    ///link file
   {
    //printf("d_name:%s/%s\n",basePath,ptr->d_name);
   }
   else if (ptr->d_type == 4)    ///dir
   {
    memset(base, ‘\0‘, sizeof(base));
    strcpy(base, basePath);
    strcat(base, "/");
    strcat(base, ptr->d_name);
    readFileList(filelist, base, format);
   }
  }
  closedir(dir);
  return 1;
 }
/************************************************************************
函数功能:文件夹内文件拷贝到另一文件夹
std::vector<string> &filelist             -- 文件名list
std::string& srcDirPath        -- 源路径
std::string& desDirPath          -- 目的路径
************************************************************************/
 void do_copy(const std::vector<std::string> &fileNameList, std::string& srcDirPath, std::string& desDirPath)
 {
  for (int i = 0; i < fileNameList.size(); i++)
  {
   std::string nowSrcFilePath, nowDesFilePath;
   nowSrcFilePath = srcDirPath + "/" + fileNameList.at(i);
   nowDesFilePath = desDirPath + "/" + fileNameList.at(i);
   std::ifstream in;
   in.open(nowSrcFilePath);
   if (!in)
   {
    std::cout << "open src file : " << nowSrcFilePath << " failed" << std::endl;
    continue;
   }
   std::ofstream out;
   out.open(nowDesFilePath);
   if (!out)
   {
    std::cout << "create new file : " << nowDesFilePath << " failed" << std::endl;
    in.close();
    continue;
   }
   out << in.rdbuf();
   out.close();
   in.close();
  }
 }
/************************************************************************
函数功能:删除某路径下的文件
std::vector<string> &filelist             -- 文件名list
std::string& srcDirPath        -- 路径
************************************************************************/
 void do_delete(const std::vector<std::string> &fileNameList, std::string& srcDirPath)
 {
  for (int i = 0; i < fileNameList.size(); i++)
  {
   std::string nowSrcFilePath;
   nowSrcFilePath = srcDirPath + "/" + fileNameList.at(i);
   remove(nowSrcFilePath.c_str());
  }
 }
//*************************************************************************
    // 函数名称: get_app_path
    // 返 回 值: const std::string&
    // 参    数: const char * init
    // 函数说明: 可以把main函数的第一个参数传进init,以它的路径初始化app_path
    // 但要注意init参数在第一次调用get_app_path时有效,否则无效
    //*************************************************************************
    const std::string& get_app_path(const char* init)
    {
        static std::string app_path;
        if (app_path.empty())
        {
            if (NULL != init)
            {
                app_path = init;
                return app_path;
            }

            char path[128] = { ‘\0‘ };
            //获取当前目录绝对路径
            if (NULL == getcwd(path, sizeof(path)))
            {
                printf("***Error***\n");
            }
            app_path = path;
        }
        return app_path;
    }

原文地址:https://www.cnblogs.com/osbreak/p/10228379.html

时间: 2024-10-20 06:22:09

常用函数-Linux文件操作的相关文章

关于Linux文件操作1.1

本文章记录本人在学习Linux中遇到的一些比较好的题目,给大家分享一下. 先来实验题目: 编程实现一个程序,功能是每一秒钟向屏幕打印当前系统时间,和当前行号示例如下 该程序应该无限循环,直到强制中断该进程为止(比如按Ctrl-C中断程序).接着再启动程序,将系统时间追加到原文件之后,并且序号能够接续上次的序号: 好了看完题目后我们应该想的是,实现这么一个功能我们需要什么知识? 我们实现功能的逻辑是什么? 我们在写代码中有什么细节需要注意的(PS:使代码尽善尽美!) a):  先花五分钟想一下这个

Linux文件操作学习总结【转载】

本文转载自: http://blog.csdn.net/xiaoweibeibei/article/details/6556951 文件类型:普通文件(文本文件,二进制文件).目录文件.链接文件.设备文件.管道文件. 文件的权限:读.写.执行 文件的相关信息:目录结构.索引节点.文件数据 索引节点的stat结构 struct stat{ dev_t st_dev;//文件使用的设备号 ino_t st_inl;//索引节点号 mode_t st_mode;//文件访问权限 nlink_t st_

Linux文件操作相关函数

一.整体大纲 st_mode整体介绍: st_mode详细介绍: 二. Linux文件操作相关函数 1. stat 作用:获得文件信息,也可以获取文件大小. 头文件 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> 函数原型 int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); i

linux文件操作

1.linux文件操作 cat test.txt | head -n 100 查看开始100行 cat finalout.txt | head -n 100 | cut -d , -f 2   安装,分割各行,取第2个位置的数据 cat test.txt |sed 's/""//g' 查看下效果 cat finalout.txt | head -n 10 | cut -d , -f 2 按,切割 cat part_name_tmp.txt | cut -d \" -f 2 &

[C#] 常用工具类——文件操作类

/// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在</para> /// <para> IsImgFilename:判断文件名是否为浏览器可以直接显示的图片文件名</para> /// <para> CopyFiles:复制指定目录的所有文件</para> /// <para> MoveFi

Linux文件操作的常用系统函数说明

1. open打开文件 (man 2 open 查看) int open(const char *pathname, int flags); //pathname文件名(路径):flags打开模式,有O_RDONLY, O_WRONLY, O_RDWR int open(const char *pathname, int flags, mode_t mode); //该函数一般用于创建新文件,flags添加O_CREAT,比如:O_RDWR|O_CREAT int creat(const cha

归纳整理Linux下C语言常用的库函数----文件操作

在没有IDE的时候,记住一些常用的库函数的函数名.参数.基本用法及注意事项是很有必要的. 参照Linux_C_HS.chm的目录,我大致将常用的函数分为一下几类: 1. 内存及字符串控制及操作 2. 字符串转换 3. 字符测试 4. 文件操作 5. 时间日期 6. 常用数学函数 7. 文件内容操作 8. 文件权限控制 9. 进程操作 10. 线程操作 11. Socket操作 12. 信号处理 13. 数据结构及算法 这次主要总结的是上面黑色部分,关于文件操作的函数. 系统调用归类 * * 函数

linux常用命令之------文件操作、文件查看、权限、打包压缩

1.一般公司把linux作为自己的应用服务器,将应用和服务器部署在上面 2.测试一般用来打包.压缩.查日志,写一个简单的shell 获得linux服务器的方式 a:网上租一台云服务器 b:安装vmware 3.用xshell等工具连接vmware虚拟机 看虚拟机与本机网络是否可以ping通,如虚拟机ping www.baidu.com vmware网络连接方式 windows属于多根 linux属于单根:/     linux下一切皆文件 4.linux目录 bin目录:linux中的执行命令,

Linux 文件操作总结

http://blog.163.com/he_junwei/blog/static/19793764620152592737741/ ioctl?? lseek?? 文件是linux中的一个重要概念.在Linux中,一切(几乎一切)都是文件.简单的说,C中基本的的printf()函数,scanf()函数,其实都属于文件操作. 对于文件操作,虽然都是通过函数调用的方式实现,却还是能分为两类:系统调用和库函数. 这篇文章将先介绍linux中文件的概念,系统调用和库函数的概念 ,然后具体的讨论两种方式