C#在Linux下获取文件夹信息(所在磁盘总大小,使用空间,已用空间,使用率)
1.第一种使用shell命令实现:
private DiskInfo LinuxGetFolderDiskInfo(string path)
{
DiskInfo disk = new DiskInfo();
if (string.IsNullOrEmpty(path))
{
return disk;
}
if (!path.StartsWith("/"))
{
path = "/" + path;
} string shellPathLine = string.Format("cd {0}", path);
string printLine = " awk '{print $2,$3,$4,$5}'";
string shellLine = string.Format("df -k {0} |", path) + printLine;
logger.Debug(string.Format("执行命令:{0}", shellLine)); Process p = new Process();
p.StartInfo.FileName = "sh";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine(shellPathLine);
p.StandardInput.WriteLine(shellLine);
p.StandardInput.WriteLine("exit"); string strResult = p.StandardOutput.ReadToEnd();
logger.Debug(string.Format("输出结果:{0}", strResult));
string[] arr = strResult.Split('\n');
if (arr.Length==)
{
return disk;
}
string[] resultArray = arr[].TrimStart().TrimEnd().Split(' ');
if (resultArray==null || resultArray.Length == )
{
return disk;
} disk.TotalSize = Convert.ToInt32(resultArray[]);
disk.UsedSize = Convert.ToInt32(resultArray[]);
disk.AvailableSize = Convert.ToInt32(resultArray[]);
disk.Use = resultArray[];
logger.Debug(string.Format("Linux获取目录:{0},总大小:{1},已用:{2},未用:{3},使用率:{4}", path, disk.TotalSize, disk.UsedSize, disk.AvailableSize, disk.Use)); return disk;
}
2.第二种使用statvfs()函数实现:(需要下载Mono.Posix.dll,引用using Mono.Unix.Native;)
public DiskInfo LinuxGetFolderDiskInfo(string path)
{
DiskInfo disk = new DiskInfo();
try
{
if (string.IsNullOrEmpty(path))
{
return disk;
}
if (!path.StartsWith("/"))
{
path = "/" + path;
} Statvfs stavfs;
Syscall.statvfs(path, out stavfs);
disk.TotalSize = (long)(stavfs.f_blocks * stavfs.f_bsize);
disk.AvailableSize = (long)(stavfs.f_bavail * stavfs.f_bsize);
disk.UsedSize = (long)(stavfs.f_bfree * stavfs.f_bsize); logger.Debug(string.Format("Linux获取目录:{0},总大小:{1},已用:{2},未用:{3}", path, disk.TotalSize, disk.UsedSize, disk.AvailableSize));
return disk;
}
catch (Exception ex)
{
logger.Error(ex);
return disk;
}
}
public class DiskInfo
{
public long TotalSize { get; set; } public long UsedSize { get; set; } public long AvailableSize { get; set; } public string Use { get; set; }
}
C#在Linux下获取文件夹信息(所在磁盘总大小,使用空间,已用空间,使用率)的更多相关文章
- linux下各文件夹的结构说明及用途介绍
linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /ho ...
- 【转】linux下各文件夹的结构说明及用途介绍
linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录 ...
- Linux下各文件夹的结构说明及用途介绍(转载)
linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录 ...
- 【转载】Linux下各文件夹的含义和用途
原文地址:https://www.cnblogs.com/lanqingzhou/p/8037269.html Linux下各文件夹的含义和用途 Linux根目录”/“下各个系统文件夹的含义和用途 1 ...
- linux下各文件夹的结构说明及用途介绍:Linux目录结构介绍
linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录 ...
- Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作
(11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...
- .net core在Linux下获取AD域信息
.net core在Linux下获取AD域信息 .net Core 2.1.4 .net core现在System.DirectoryServices只支持Windows平台下使用. 参考: http ...
- Linux下的文件夹创建命令使用实践
[文章摘要] 本文以实际的C源程序为样例,介绍了Linux下的文件夹创建命令(mkdir)的用法.为相关开发工作的开展提供了故意的參考. [关键词] C语言 Linux 文件夹创建 makefi ...
- cocos2d-x3.2下获取文件夹下所有文件名的方法
这里提供一个函数获取文件夹下所有文件名的方法,直接上代码了. 原文地址:http://blog.csdn.net/qqmcy/article/details/36184733 // // Visib ...
随机推荐
- JavaSE-11 接口
学习要点 接口的定义 接口作为约定 接口作为能力 接口 为什么使用接口 需求描述 要求实现防盗门的功能(防盗门:带锁的门). 需求分析 门有“开”和“关”的功能,锁有“上锁”和“开锁”的功能. 将门和 ...
- Python tldextract模块
最新发布的 PyPI: pip install tldextract 或者最新的开发版本: pip install -e 'git://github.com/john-kurkowski/tldext ...
- 第3节 mapreduce高级:5、6、通过inputformat实现小文件合并成为sequenceFile格式
1.1 需求 无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件的场景,此时,就需要有相应解决方案 1.2 分析 小文件的优化无非以下几种方式: 1. 在数据 ...
- CentOS中一些基本的操作记录
1)切换到root su root 输入你的密码.我的是123
- 【牛客小白月赛6】 J 洋灰三角 - 快速幂&逆元&数学
题目地址:https://www.nowcoder.com/acm/contest/136/J 解法一: 推数学公式求前n项和: 当k=1时,即为等差数列,Sn = n+pn(n−1)/2 当k≠1时 ...
- 笔试算法题(34):从数字序列中寻找仅出现一次的数字 & 最大公约数(GCD)问题
出题:给定一个数字序列,其中每个数字最多出现两次,只有一个数字仅出现了一次,如何快速找出其中仅出现了一次的数字: 分析: 由于知道一个数字异或操作它本身(X^X=0)都为0,而任何数字异或操作0都为它 ...
- double salary = wage = 9999.99错误
在看书时,有这么一句表达式 double salary = wage = 9999.99; 在Linux中编译时,不能通过,提示是 error: 'wage' was not declared in ...
- Python:安装3.6
centos7 自带有 python,但是却是 python2 版本的 python,如果你想安装个python3怎么办呢?难道要从github上把源码clone下来进行编译安装么?没错!因为 yum ...
- Buffer.from(arrayBuffer[, byteOffset[, length]])
Buffer.from(arrayBuffer[, byteOffset[, length]]) arrayBuffer - 一个 TypedArray 或 new ArrayBuffer() 的 . ...
- AutoEncoders变种
目录 PCA V.S. Auto-Encoders Denoising AutoEncoders Dropout AutoEncoders PCA V.S. Auto-Encoders deep au ...