linux c++ 目录操作,C++文件及文件夹操作整理(代码示例)
一 文件
1.1 使用C++标准库中的IO库(fstream)读写文件
#include
#include
using namespace std;
int main()
{
char szData[200] = "123456 test";
fstream fFile;
fFile.open("test.txt", ios::app | ios::out | ios::in);
/****************将数据写入文件-begin***************/
fFile << szData;
/****************将数据写入文件-end***************/
/*************** 将数据从文件中读取出来-begin******************/
fFile.seekg(0, ios::end);
int iSize = fFile.tellg(); //计算出文件大小
fFile.seekg(ios::beg); //从文件最前面开始读取
fFile >> noskipws; //设置读取空格、回车
std::string strDataOut;
for (int i = 0; i < iSize/*!afile.eof()*/; i++)
{
char c;
fFile >> c;
strDataOut.push_back(c);
}
cout << strDataOut.c_str();
/*************** 将数据从文件中读取出来-end******************/
fFile.close();
return 0;
}
1.2 使用windows API读写文件
#include
#include
int main()
{
std::string strFileName = "test.txt";
/*************************写文件-begin******************************/
std::string strData = "123456 test";
DWORD dwReturn;
HANDLE hFileWrite = CreateFileA(strFileName.c_str(), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE != hFileWrite)
{
WriteFile(hFileWrite, strData.c_str(), strData.length(), &dwReturn, NULL);
CloseHandle(hFileWrite);
}
/*************************写文件-end******************************/
/*************************读文件-begin******************************/
DWORD bytesRead = 0;
char szBuffer[1024] = { 0 };
HANDLE hFileRead = CreateFileA(strFileName.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE != hFileRead)
{
ReadFile(hFileRead, szBuffer, 1024/*static_cast(length)*/, &bytesRead, NULL);
CloseHandle(hFileRead);
}
/*************************读文件-end******************************/
return 0;
}
1.3 linux读写文件
#include
#include
#include
#include
int main()
{
std::string strPath = "test.txt";
/*************************写文件-begin******************************/
int iFileWrite = ::open(strPath.c_str(), O_TRUNC | O_APPEND | O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if ( -1 == iFileWrite)
{
return 0;
}
std::string strBuffer = "Test Data";
int n = write(iFileWrite, strBuffer.c_str(), strBuffer.length());
::close(iFileWrite);
/*************************写文件-end******************************/
/*************************读文件-begin******************************/
char szBuffer[1024] = { 0 };
int iFileRead = ::open(strPath.c_str(), O_RDONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (-1 == iFileRead)
{
return 0;
}
read(iFileRead, szBuffer, 1024);
std::cout << szBuffer;
::close(iFileRead);
/*************************读文件-end******************************/
return 0;
}
二 文件夹
1.1 Windows
1. 创建文件夹
#include
#include
#include
using namespace std;
int main()
{
string folderPath = "E:\\Test\\Dir";
if (0 != access(folderPath.c_str(), 0))
{
int iRst = mkdir(folderPath.c_str()); // 需要迭代创建,即创建子文件夹时父文件夹必须存在
}
return 0;
}
2. 遍历文件夹
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
using namespace std;
//获取文件夹下所有文件名及文件夹总大小
DWORD TraversalFolder(string strPath, vector& files)
{
DWORD dwRtn = 0;
long hFolder = 0; //文件句柄
struct _finddata_t fileinfo; //文件信息
string strFileName = "";
if ((hFolder = _findfirst(strFileName.assign(strPath).append("\\*").c_str(), &fileinfo)) != -1)
{
do
{
DWORD dwSize = 0;
//如果是目录,迭代之;如果不是,加入列表
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
{
dwSize = TraversalFolder(strFileName.assign(strPath).append("\\").append(fileinfo.name), files);
}
}
else
{
files.push_back(strFileName.assign(strPath).append("\\").append(fileinfo.name));
dwSize = fileinfo.size;
}
dwRtn += dwSize;
} while (0 == _findnext(hFolder, &fileinfo));
_findclose(hFolder);
}
return dwRtn;
}
int main()
{
char * filePath = "E:/test";
DWORD dwFolderSize;
vector files;
dwFolderSize = TraversalFolder(filePath, files);//获取文件夹下所有文件名及文件夹总大小
system("pause");
}
1.2 Linux
1. 创建文件夹
#include
#include
#include
int main()
{
std::string strParh = "Test111";
int isCreate = ::mkdir(strParh.c_str(), S_IRUSR | S_IWUSR | S_IXUSR | S_IRWXG | S_IRWXO);// // 需要迭代创建,即创建子文件夹时父文件夹必须存在
if (0 == isCreate)
{
std::cout << "mkdir succeeded";
}
else
{
std::cout << "mkdir failed";
}
return 0;
}
2. 遍历文件夹
#include
#include
#include
#include
#include
#include
#include
void TraversalFolder(const char *filedir)
{
struct stat dirstat;
if (stat(filedir, &dirstat) == -1)
{
printf("cant access to %s", filedir);
exit(1);
}
if (dirstat.st_mode & S_IFDIR)
{
struct dirent *entry;
DIR * dir;
dir = opendir(filedir);
printf("%s\n", filedir);
while ((entry = readdir(dir)) != NULL)
{
if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, ".."))continue;
char src[255];
strcpy(src, filedir);
strcat(src, "/");
chdir(strcat(src, entry->d_name));
TraversalFolder(src);
chdir(filedir);
}
}
else
{
printf("--%s\n", filedir);
}
}
int main(int argc, char *args[])
{
if (argc != 2)
{
printf("param error");
}
TraversalFolder(args[1]);
return 0;
}
相关文章:

cocos2d-x 音效中断问题
做跑酷重吃金币播音效时,播放其它音效会使得音效所有中断,最后发现时音效上限的问题,2.2.3默认的似乎是5个音效,改动成50后问题解决。 在java中的org.cocos2dx.lib包下有一个Cocos2dxSound.java文件,改动里面 private …

AStyle - SourceInsight
SourceInsight : Options : Custom Commands Add 在弹出对话框写入 C/C Formatter "C:\AStyle\AStyle.exe" --styleansi -s2 --convert-tabs %f SourceInsight : Options : Key Assignments

c# blockingcollections
1 class Program2 {3 static BlockingCollection<int> cols new BlockingCollection<int>(2); //设置阻塞队列最大的容量;4 public static void Main(string[] args)5 {6 7 8 var t1…

递归/回溯:subsets求子集
前言 回溯法又称为试探法,但当探索到某一步时,发现原先选择达不到 目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。 已知一组数(其中无重复元素),求这组数可以组成的所有子集。 结果中不可有无重复的子…

C++ stl vector介绍
转自: STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用。通过阅读这篇文章读者应该能够有效地使…

Linux服务器部署ssl证书教程,linux服务器在wdcp面板安装ssl证书教程
不少站长如今越来越在意站内数据传输的安全性,想着把自己建设的网站加密传输,许多站长都需要安装ssl证书,且很多站长都在找寻centos系统服务器linux服务器或者是wdcp面板怎么安装ssl证书,网上找了下没有完整步骤教程,所…

设备节点注册和操作方法连接
今天把驱动程序乱七八糟的看了一通,简单总结一下。 一个完整的驱动,需要提供如下的东西, 第一,用户空间/dev下面的设备节点。当然,如果该设备仅仅是内核的使用,例如I2C,则不需要在/dev下面建立…

maven(一 基本操作 命令 标签)
原来一直没有使用maven 小公司,只是听说过这个东西,我没事就喜欢 去学习一些新东西。maven学了几次,但是 没有用上 所以 最后还是忘记了,或者说不知道怎么使用maven,一年半以前公司 改革 ,招了一个技术大牛…

递归/回溯:Subsets II求子集(有重复元素)
上一篇描述了针对数组中没有重复元素进行子集的求取过程递归/回溯:subsets求子集 但是当出现如下数组时: 例如: nums[] [2, 1, 2, 2] 结果为: [[], [1], [1,2], [1,2,2], [1,2,2,2], [2], [2,2], [2,2,2]] 注意: [2,1,2]与[1,2,2]是重复的集合,则不满足…

[WP]使用ApacheCordova开发HTML5-WindowsPhone应用程序
下载代码示例 这篇文章介绍 Apache 科尔多瓦,创建使用 HTML5 和 JavaScript,跨平台移动应用程序的框架,并显示了如何使用它为 Windows Phone 开发应用程序。 Windows Phone 和其本机开发平台允许您轻松地创建美丽地铁样式的应用程序。 最近诺…

linux 不能运行程序代码,linux-无法在Ubuntu上运行我自己的OpenGL 3程序
我正在尝试OpenGL 2.x和3.x教程.程序进行编译和链接,然后在看似无害的行上进行段错误处理,例如glGenBuffers (1, &m_buffer);我的main()以glewInit和glutInit开头. OpenGL 1程序可以编译并正常运行,这似乎是由glew包装的新功能.一个教程说,在尝试任何其他操作之前,我应该先…

Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1
错误大致显示如下信息:04-14 07:39:18.325: E/AudioEffect(20584): set(): AudioFlinger could not create effect, status: -104-14 07:39:18.325: E/libOpenSLES(20584): Effect initCheck() returned -104-14 07:39:18.325: E/libOpenSLES(20584): Environmental…

H2:开源内存数据库引擎
本资源由 伯乐在线 - 刘立华 整理H2是一个开源的内存数据库。Java编写、快速、小巧(1.5MB jar包)还提供了Web控制台管理数据库内容。 主要功能 非常快速的数据库引擎。开源。Java编写。支持标准SQL、JDBC API。支持嵌入式模式、服务器模式和集群。强大的…

递归/回溯:Combination Sum II数组之和
问题如下: 已知一组数(其中有重复元素),求这组数可以组成的所有子集中,子 集中的各个元素和为整数target的子集,结果中无重复的子集。 例如: nums[] [10, 1, 2, 7, 6, 1, 5], target 8 结果为: [[1, 7], [1, 2, 5], …
如何在SharePoint2010中添加Deep Zoom Image
如何在SharePoint2010中添加Deep Zoom Image 应用范围 SharePoint 2010 Foundation;SharePoint 2010 Standard;SharePoint 2010 Enterprise所需材料 1. SeaDragon Ajax Viewer Web部件(点击此处下载)2. Deep Zoom Image Composer&…

linux 读取磁盘扇区,linux 下检查硬盘坏道/扇区
文章摘自:Linux检测硬盘坏道Linux检测硬盘坏道badblocks功能说明:检查磁盘装置中损坏的区块。语法:badblocks [-svw][-b ][-o ][磁盘装置][磁盘区块数][启始区块]补充说明:执行指令时须指定所要检查的磁盘装置,及此装置…

Pjax是什么以及为什么推荐大家用
什么是pjax? 现在很多网站( facebook, twitter) 都支持这样的一种浏览方式, 当你点击一个站内的链接的时候, 不是做页面跳转, 而是只是站内页面刷新。 这样的用户体验, 比起整个页面都闪一下来说, 好很多。 其中有一…

Scrapy框架CrawlSpider类爬虫实例
CrawlSpider类爬虫中: rules用于定义提取URl地址规则,元祖数据有顺序 #LinkExtractor 连接提取器,提取url地址 #callback 提取出来的url地址的response会交给callback处理 #follow 当前url地址的响应是否重新经过rules进行提取url地址 cf.py具…

递归/回溯:Generate Parentheses生成合法括号
已知n组括号,开发一个程序,生成这n组括号所有的合法的组合可能。 例如:n 3 结果为: ["((()))", “(()())”, “(())()”, “()(())”, “()()()”] 首先思考如何生成所有的括号组合的可能性,即例如2组括号,总共4个符号…

利用“哨兵”“实现双链表
利用“哨兵”“实现双链表 下面的代码用一个”哨兵“实现双链表,感觉很简洁,中间也有点绕,暂时实现,供学习之用 static Node list_handle {&list_handle,&list_handle, };bool addNode(Node* node) {if (node NULL){re…

suse linux显示乱码,open suse11.4中文乱码问题
winland0704 于 2011-04-07 00:56:10发表:不是乱码,而是字符编码标准不一样。windows的文本使用GBK,国标码。Linux使用Unicode编码。解决参看:hi.baidu.com/winland0704/blog/item/c58008512cc843c9b645aef1.html四、其他的一些问题3、文本编…

软件破解系列之OD中断方法
OD中断方法浅探 Ollydbg是一个新的32位的汇编层调试软件。适应于windows98、me、2000、xp和2003操作系统。由于他具有图形窗口界面,所以操作方便、直观,是cracker的好工具。 由于Ollydbg没有了TRW2000的万能断点,所以许多的新手感觉到用Ollyd…

MongoDB系列:二、MongoDB常用操作练习
最近在自学MongoDB,在此记录一下,当做学习笔记了(不断更新中)!! 一、背景 MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。它是一个介于关…

递归/回溯:八皇后问题N-Queens
N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯贝瑟尔于提出了8皇后问题。 将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放方式具体是怎样的? 8…

KS103超声波测距模块
max232:电平转换芯片,将电脑的RS-232标准串口(高12V,低-12V)转换为(高5V,低0V)。 电脑串口(RS -232) > 单片机串口(TTL串口) SIPEX…

linux 硬盘操作,linux常用disk磁盘操作命令
#按照目录大小排序战士最前面15个目录或者文件du -xB M --max-depth2 /var | sort -rn | head -n 15#列出当前所有子目录的文件大小du -h --max-depth1#列出当前文件或者目录最大的10个du -s * | sort -n | tail#按照目录大小从大到小排序du -b --max-depth 1 | sort -nr | per…

在Spring中采用声明式方法对Hibernate和JDBC进行统一的事务配置(AOP)
<?xml version"1.0" encoding"UTF-8"?><beans xmlns"http://www.springframework.org/schema/beans" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns:aop"http://www.springframework.…

Leetcode 213.大家劫舍II
打家劫舍II 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房…

替代Druid,HakariCP 为什么这么快?
这次源码探究,真的感觉看到了无数个小细节,无数个小优化,积少成多。平时开发过程中,一些小的细节也一定要“扣”。

递归/分治:归并排序
前言 分治算法: 将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出 子问题的解后进行合并,就可得到原问题的解。 步骤如下: 分解,将要解决的问题划分成若 干规模较小的同类问题;求解,…