c++获取工程目录
2016-08-02 15:43:00 weixin_34364135 阅读数 0

项目目录结构的问题基本上是个仁者见仁,智者见智的问题,只要自己用着顺手,使用什么样的目录组织结构是没有什么大碍的。当然如果项目很大,参与的人员很多,那么合理的组织一下目录结构还是会有很大的益处的。不同类型的项目也会有不同的目录结构,这里简单的展示一下我所使用的C++项目的基本目录结构。

project --+---build---+---debug
     |      |---release
     |---dist
     |---doc
     |---include---+---module1
     |       |---module2
     |---lib
     |---module1
     |---module2
     |---res
     |---samples---+---sample1
     |        |---sample2
     |---tools
     |---copyleft
     |---Makefile
     |---README
     |--- ...

下面分别介绍一下各目录和文件的用途

build/:项目编译目录,各种编译的临时文件和最终的目标文件皆存于此,分为debug/和release/子目录

dist/:分发目录,最终发布的可执行程序和各种运行支持文件存放在此目录,打包此目录即可完成项目分发

doc/:保存项目各种文档

include/:公共头文件目录,可以按模块划分组织目录来保存模块相关头文件

lib/:外部依赖库目录

res/:资源目录

samples/:样例程序目录

tools/:项目支撑工具目录

copyleft:版权声明文件,当然也可以叫做copyright :-)

Makefile:项目构建配置文件,当然也有可能是其他类型的构建配置文件,比如bjam

README:项目的总体说明文件

转载于:https://www.cnblogs.com/kuliuheng/p/5729559.html

2014-04-09 17:02:12 yanming8888 阅读数 98
////////////////////////////////////////////////////
//获取目录路径下面所有文件的内容
//适用于linux和windows系统
////////////////////////////////////////////////////
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#ifdef _WIN32
#include <Windows.h>
#include <strsafe.h>
#else
#include <dirent.h>
#endif
 
using namespace std;
 
//////////////////////////////////////////////////////////////////////////
//获取指定目录下所有文件的文件名,不包括文件夹,在GetFileFromDir中使用
//strDir: 输入,目录路径
//vFileDirList: 输出,文件路径列表
//返回:空
//////////////////////////////////////////////////////////////////////////
void GetFileNameFromDir(string strDir,vector<string>& vFileDirList)
{
#ifdef _WIN32
WIN32_FIND_DATAA ffd;
LARGE_INTEGER filesize;
string szDir;
//size_t length_of_arg;
HANDLE hFind = INVALID_HANDLE_VALUE;
DWORD dwError=0;
 
szDir=strDir+"\\*";
hFind = FindFirstFileA(szDir.c_str(), &ffd);
 
if (INVALID_HANDLE_VALUE == hFind) 
{
cout<<"get file name error"<<endl;
return;
}
do
{
if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
string filename=ffd.cFileName;//(const char*)
string filedir=strDir+"\\"+filename;
vFileDirList.push_back(filedir);
}
}while (FindNextFileA(hFind, &ffd) != 0);
 
dwError = GetLastError();
if (dwError != ERROR_NO_MORE_FILES) 
{
cout<<"FindFirstFile error"<<endl;
return;
}
FindClose(hFind);
#else
DIR *dir;
struct dirent *ptr;
dir = opendir(strDir.c_str());
while( (ptr = readdir(dir)) != NULL)
{
string path = strDir + string("/") + string(ptr->d_name);
vFileDirList.push_back(path);
}
closedir(dir);
sort(vFileDirList.begin(), vFileDirList.end());
#endif
}
 
//////////////////////////////////////////////////////////////////////////
//获取指定目录下所有文件内容
//strDir: 输入,目录路径
//vFileNameList: 输出,文件内容列表
//返回:空
//////////////////////////////////////////////////////////////////////////
void GetFileFromDir(string strDir,vector<string>& vFileList)
{
//获取目录路径下所有文件的文件名
vector<string> vFileDirList;
GetFileNameFromDir(strDir,vFileDirList);
//读取文件
vector<string>::iterator iterFileDir;
for (iterFileDir=vFileDirList.begin();iterFileDir!=vFileDirList.end();iterFileDir++)
{
ifstream infile((*iterFileDir).c_str());
if (!infile)
{
cout<<"read file error"<<endl;
return;
}
string line="";
string file="";
while (getline(infile,line))
{
file+=line;
}
vFileList.push_back(file);
}
}
 
int main(int argc,char* argv[])
{
if (argc!=2)
{
cout<<"paramater error"<<endl;
return -1;
}
else
{
string dir(argv[1]);
vector<string> files;
GetFileFromDir(dir,files);
vector<string>::iterator iterFile;
for (iterFile=files.begin();iterFile!=files.end();iterFile++)
{
cout<<*iterFile<<endl;
}
cout<<endl;
system("pause");
return 0;
}
}
2014-03-10 22:01:55 heyzol 阅读数 526
#include <string>
#include <windows.h>
#include <tchar.h>
std::string GetAppPath()
{
    //获取应用程序根目录
    TCHAR modulePath[MAX_PATH];
    GetModuleFileName(NULL, modulePath, MAX_PATH);
    std::string strModulePath(modulePath);
    strModulePath = strModulePath.assign(strModulePath, 0,
                                         strModulePath.find_last_of(_T('\\')));
    return strModulePath;
}

2019-04-25 13:31:16 qq_28107929 阅读数 67

char* GetExePath()
{
//获取应用程序目录
CHAR szapipath[_MAX_PATH];//(D:\Documents\Downloads\TEST.exe)
memset(szapipath, 0, _MAX_PATH);
GetModuleFileName(NULL, szapipath, _MAX_PATH);

//获取应用程序名称
char szPath[_MAX_PATH] = "";//(TEST.exe)
char *pbuf = NULL;
char* szLine = strtok_s(szapipath, "\\", &pbuf);

while (NULL != szLine)
{
	std::string str = szLine;
	if (str.find(".exe") == str.npos)
	{
		strcat_s(szPath, szLine);
		strcat_s(szPath, "\\");
	}

	szLine = strtok_s(NULL, "\\", &pbuf);

}

char* path = (char*)malloc(_MAX_PATH * sizeof(char));
ZeroMemory(path, _MAX_PATH * sizeof(char));
memcpy(path, szPath, _MAX_PATH);

return path;

}

2019-06-25 18:48:56 m0_37542524 阅读数 37

1,使用

int main() {
 	while(pipeline_run_flag) {
        system("top -s -b -n 1 |grep -E \"Cpu|KiB Mem |KiB Swap\" > log/sys_state.txt");
        
        write_system_state_to_log("log/sys_state.txt");
        usleep(1000*1000);
    }
}

2,函数实现

// write system state to log
void write_system_state_to_log(std::string filename) 
{ 
    std::ifstream fp;
    std::string rtline, szLine;
    std::string total_t, free_t, used_t, buffer_t; 
	std::string::size_type pos1, pos2;
    
    fp.open(filename);
    if (!fp.is_open()) {
		LOG(ERROR) << "Error: can not find file: " << filename;
    }
    else {
        LOG(WARNING) << filename << " open successful! ";
    }
    
    // CUP%
	getline(fp, rtline);
    szLine = rtline.c_str();
    LOG(WARNING) << szLine;

    // MEM
	getline(fp, rtline);
    szLine = rtline.c_str();
//     LOG(WARNING) << szLine;
	
    pos1 = szLine.find(':')+1;
    szLine = szLine.substr(pos1);
	pos2 = szLine.find('t');
	total_t = szLine.substr(0, pos2).c_str();
    
    pos1 = szLine.find(',')+1;
    szLine = szLine.substr(pos1);
	pos2 = szLine.find('f');
	free_t = szLine.substr(0, pos2).c_str();

    pos1 = szLine.find(',')+1;
    szLine = szLine.substr(pos1);
	pos2 = szLine.find('u');
	used_t = szLine.substr(0, pos2).c_str();

    pos1 = szLine.find(',')+1;
    szLine = szLine.substr(pos1);
	pos2 = szLine.find('b');
	buffer_t = szLine.substr(0, pos2).c_str();

    float total = a2i(total_t);
    float free = a2i(free_t)/total * 100;
    float used = a2i(used_t)/total * 100;
    float buffer = a2i(buffer_t)/total * 100;
    LOG(WARNING) << "KiB Mem : " 
        << std::setiosflags(std::ios::fixed) << std::setprecision(0) 
        << total << " total, " 
        << std::setiosflags(std::ios::fixed) << std::setprecision(2) 
        << free << "\% free, " 
        << std::setiosflags(std::ios::fixed) << std::setprecision(2) 
        << used << "\% used, " 
        << std::setiosflags(std::ios::fixed) << std::setprecision(2) 
        << buffer << "\% buff/cache";
	
    // SWAP
    getline(fp, rtline);
    szLine = rtline.c_str();
    LOG(WARNING) << szLine;
	
    fp.close();
}


int a2i(std::string str) {
    int num = 0;
    int i = 0;
    while(i <= str.size()) {
        if(str[i] >= '0' && str[i] <= '9') {
            num = num * 10 + str[i] - '0';
//             std::cout << "str[" << i << "]: " << str[i] << std::endl;
        } 
        i++;
    }
    return num;
}

C/C++获取当前目录的方法

博文 来自: fannana2011
没有更多推荐了,返回首页