展示远程服务器文件夹内容的C++实现

基本的设计思路:将远程服务器的目录转换为一个JSON格式的字符串,然后传输到客户端。一 要点:1、递归遍历服务器的目录,转换为JSON格式的字符串2、客户端将JSON字符串还原为树结构二 实现2.1 服务器目录结构的JSON格式{"name":"根目录文件夹","files":["文件1.txt","文件2.txt"],"dirs":[
摘要由CSDN通过智能技术生成

设计思路:将远程服务器的目录转换为一个JSON格式的字符串,然后传输到客户端。

要点

1、递归遍历服务器的目录,转换为JSON格式的字符串

2、客户端将JSON字符串还原为树结构


实现

服务器目录结构的JSON格式

{

"name":"根目录文件夹",

"files":["文件1.txt","文件2.txt"],

"dirs":[

           {

           "name":“""子目录1”,

           "files":["子目录下的文件1.txt","子目录下的文件2.txt"]

           "dirs":{}

           },

           ... 其他子目录

          ]

}

"name"目录名

"files"的每一个元素都是目录下文件

"dirs"的每一个元素都是一个该目录下的子目录

创建这个JSON串的代码如下:

#include "StdAfx.h"
#include "FileCollect.h"
#include "../common/DebugMessage.h"
#include "../common/json/value.h"
#include "../common/json/reader.h"

CFileCollect::CFileCollect(void)
{
}


CFileCollect::~CFileCollect(void)
{
}

string CFileCollect::CollectFiles(const TString& folder)
{
	Json::Value jv;
	CollectFiles(folder,jv,folder);
	return jv.toStyledString();
}

BOOL CFileCollect::CollectFiles( const TString& folder ,Json::Value& jv, const TString& relativeFolder)
{
	TString CurrentFolder = folder; 
	BOOL bRet = FALSE;
//	DebugMessage(_T("枚举目录:%s"),CurrentFolder.c_str());
	//创建"name"字段,表示此目录的名字
	string strName = util::string::TString2String(CurrentFolder);
	strName = strName.substr(relativeFolder.length());
	jv["name"] = strName;
	//这个用来装文件列表
	Json::Value jvArrayFiles;
	//这个用来装目录列表
	Json::Value jvArrayFolders;

	WIN32_FIND_DATA FindFileData;
	TString tmpFind(CurrentFolder);
	tmpFind += _T("\\*.*");

	HANDLE hFind=::FindFirstFile(tmpFind.c_str(),&FindFileData);
	if(INVALID_HANDLE_VALUE == hFind)
		return bRet;

	while(TRUE)
	{
		TString tmpFile(CurrentFolder);
		tmpFile += _T("\\");
		tmpFile += FindFileData.cFileName;

		if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
		{
			//目录
			if(FindFileData.cFileName[0]!='.')
			{
				Json::Value tempJsonValue;
				bRet = CollectFiles( CurrentFolder + _T("\\") + FindFileData.cFileName,tempJsonValue,relativeFolder);
				//在目录列表中添加目录
				jvArrayFolders.append(tempJsonVal
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值