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("%sn", 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("--%sn", filedir);

}

}

int main(int argc, char *args[])

{

if (argc != 2)

{

printf("param error");

}

TraversalFolder(args[1]);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值