首页 > 其他分享 >文件管理器

文件管理器

时间:2024-10-25 19:09:09浏览次数:5  
标签:文件 管理器 name LNode int folder size

Description

文件管理器
操作系统具有对计算机硬件资源管理和调度的功能。文件是对占用了硬盘一定空间的对象的描述和抽象。考虑一般的文件
具有文件名、大小和创建时间。文件管理在任何操作系统中都是必不可少的。文件管理器是用户用来观察和操作文件的一
个软件。考虑一个简易的文件管理器,用户可以通过这个简易的文件管理器对某个目录下文件最大/小、文件名(字符串)字
典序最大/最小的一些文件,即按XX排序功能,此外文件管理器具有删除和添加文件的功能。输入保证目录只有一级,操
作随机。

Input

第1行输入一个Q(1<=Q<=100000),表示操作的次数。

第2-Q+1行输入一行操作序列

操作序列的格式为 op args

当op=1,即第一种操作时,args的格式为 folder name size 表示将要在某个folder目录(1<=folder<=5的整数)下添加文件名为name(1<=name<=100000的整数)的文件,文件大小为size(1<=size<=100000的整数),如果文件名重复,就先删除原来的文件再进行1操作;

当op=2,即第二种操作时,args的格式为 folder name表示将要在某个folder目录(1<=folder<=5的整数)下删除文件名为name(1<=name<=100000的整数)的文件,如果文件名不存在,操作不执行;

当op=3,即第三种操作时,args的格式为 folder k 表示输出某个目录下文件大小最大至第k大的文件名,如果大小相同按文件名数字从小到大输出,如果不满k个文件只需要输出已有的文件名,如果文件夹为空或不存在则输出一个空行;

当op=4,即第四种操作时,args的格式为 folder k 表示输出某个目录下文件名数字大小最小至第k小的文件名,如果不满k个文件只需要输出已有的文件名,如果文件夹为空或不存在则输出一个空行;

保证1<= k <=10

Sample Input

10

2 3 74071

3 1 2

3 2 8

2 3 71337

3 3 7

3 2 7

4 2 10

4 3 6

4 3 4

3 1 4

Sample Output

8行空行

思路

#include<iostream>
using namespace std;
#include<unordered_map>
#include<vector>
#include<algorithm>

const int N = 6;
typedef struct LNode* List;
struct LNode {
	int name;
	int size;
	LNode(int a, int b) :name(a), size(b){}
};

bool my_cmp_greater(LNode a, LNode b)
{
	if (a.size == b.size) return a.name < b.name;
	
	return a.size > b.size;
}
bool my_cmp_less(LNode a, LNode b)
{
	if (a.size == b.size) return a.name >b.name;

	return a.size <b.size;
}
bool my_find(LNode a, LNode b)
{
	return a.name == b.name;
}
int main() {
	vector<LNode>v[N];
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		int op;
		cin >> op;
		int folder=0, name=0, size=0;
		int  k = 0;
		switch (op) 
		{
		case 1:		
		{
			cin >> folder>>name>>size;
		LNode tmp = LNode(name, size);
		bool flag = true;
		for (int i = 0; i < v[folder].size(); i++)
		{
			if (v[folder][i].name == name)
			{
				v[folder][i] = tmp;
				flag = false;
			}
		}
		if (flag)
		{
			v[folder].push_back(tmp);
		}

		/*vector<LNode>::iterator it = find_if(v->begin(), v->end(), [](LNode n1, LNode n2) {return n1.name == n2.name; });*/

		break;
		}
			
		case 2:
		{
			cin >> folder >> name;
			for (int i = 0; i < v[folder].size(); i++)
			{
				if (v[folder][i].name == name)
				{
					
					v[folder][i] = v[folder].back();
					v[folder].pop_back();
				}
			}
			break;
		}
					

		case 3:		
		{
			cin >> folder >> k;
			sort(v[folder].begin(), v[folder].end(), my_cmp_greater);//从大到小
			if (v[folder].size() == 0)
			{
				cout << endl;
				break;
			}
			if (v[folder].size() < k)
			{
				for (int i = 0; i < v[folder].size(); i++)
				{
					cout << v[folder][i].name << ' ' << v[folder][i].size << endl;
				}
			}
			else
			{
				for (int i = 0; i < k; i++)
				{
					cout << v[folder][i].name << ' ' << v[folder][i].size << endl;
				}
			}
			break;
		}
		
		case 4:
		{
			int folder, k;
			cin >> folder >> k;
			sort(v[folder].begin(), v[folder].end(), my_cmp_less);//从大到小
			if (v[folder].size() == 0)
			{
				cout << endl;
				break;
			}
			if (v[folder].size() < k)
			{
				for (int i = 0; i < v[folder].size(); i++)
				{
					cout << v[folder][i].name << ' ' << v[folder][i].size << endl;
				}
			}
			else
			{
				for (int i = 0; i < k; i++)
				{
					cout << v[folder][i].name << ' ' << v[folder][i].size << endl;
				}
			}
			break;
		}
			
		}
	}
}

标签:文件,管理器,name,LNode,int,folder,size
From: https://www.cnblogs.com/szz123/p/18503149

相关文章

  • 使用 aria2 下载文件
    Aria2是一个轻量级的多协议、多来源命令行下载工具。它支持HTTP、HTTPS、FTP、BitTorrent和Metalink协议,能够在不同的协议之间无缝切换以优化下载速度。安装#macOSbrewinstallaria2#Ubuntu/Debiansudoaptinstallaria2下载aria不能设置socks5代理aria......
  • md文件转html (使用vscode 中的markdown---->html)
    一、采用vscode 制作和打开md文件 1.1安装markdown和markdownoreviewenhanced扩展插件1.2 修改设置  1.3用vscode打开md文件,右键--->点击---下图按钮。生成.md,然后右键点击export--->html--->html(offline) .最后就生成html格式的文件啦。记得三......
  • linux中,使用python3 实现用硬链接的方式复制复合文件夹
    copy_with_hardlink.pyimportosimportargparsedefcopy_with_hardlinks(src,dst):ifnotos.path.exists(dst):os.makedirs(dst)foriteminos.listdir(src):src_item=os.path.join(src,item)dst_item=os.path.join(d......
  • Oracle数据泵导出的DMP文件还原
    Oracle数据库备份的DMP文件如何还原到数据库中,或者还原到另外一个Oracle数据库中下面这个命令在oracle所在服务器中根据自身情况修改后执行:impdpusername/password@orcldirectory=dbbackupdumpfile=backupfilename.DMPschemas=xxdbremap_schema=xxdb:newxxdb接下来对命令......
  • Vue文件下载和导出
    1.Promise.all()的运行机制输入参数是一个可迭代对象,每个元素是一个Promise。返回一个新的Promise,该Promise在所有输入的Promise都成功解决时解决,或者在任何一个输入的Promise被拒绝时立即拒绝。1.以下解释:该Promise在所有输入的Promise都成功解决时解决//工......
  • MongoDB配置文件详解--转
    一配置文件说明MongoDB有两种配置文件格式,分别是:3.2版官方yaml配置文件选项参考用=号的常规格式类似my.conf等常规配置的文件yaml语法的新格式mongodb3.x版本后就是要yaml语法格式的配置文件,下面是yaml配置文件格式如下:切记yaml只能使用空格,不支持tab键,切记配置举例配置......
  • C# 拖动文件到其他程序窗口
    支持拖动文件实现一个支持拖动文件到其他程序窗口的文件管理器,可以通过使用C#的WindowsForms或WPF来完成。下面是一个基本的示例,展示如何在WindowsForms应用程序中实现这一功能。步骤:创建WindowsForms应用程序:使用VisualStudio创建一个新的WindowsForms......
  • vivo 轩辕文件系统:AI 计算平台存储性能优化实践
    在早期阶段,vivoAI计算平台使用GlusterFS作为底层存储基座。随着数据规模的扩大和多种业务场景的接入,开始出现性能、维护等问题。为此,vivo转而采用了自研的轩辕文件系统,该系统是基于JuiceFS开源版本开发的一款分布式文件存储方案。本文将介绍vivo轩辕文件系统在JuiceFS......
  • linux的文件时间属性
    文件时间属性概念在Linux文件系统中,时间属性是指与文件相关的三个关键时间戳:创建时间(ctime)、修改时间(mtime)和访问时间(atime)1。这些时间戳不仅记录了文件生命周期中的重要时刻,还为系统管理员提供了宝贵的监控和管理工具。通过精确追踪文件的创建、修改和访问时间,Linux......
  • 【原创】修正fpspreadsheet读某些复杂xlsx文件时出错的Bug
    网友“海”在使用fpspreadsheet时遇到读取复杂的xlsx文件会出错: 经跟踪发现运行到fpspreadsheet\source\common\xlsxooxml.pas的procedureTsSpreadOOXMLReader.ReadFromStream的ReadDefinedNames(Doc.DocumentElement.FindNode('definedNames'))这行出错,查看早期(fpspreadsheet......