2011第二帖----散分帖------C#对磁盘的操作

Return门徒 2011-03-07 10:35:55
已知服务器有C: D: E:三个磁盘

C盘 总大小:100G 已用:20G 剩余:80G
D盘 总大小:100G 已用:10G 剩余:90G
E盘 总大小:100G 已用:50G 剩余:95G

想完成的功能

设置所开发的软件对系统磁盘空间的占用功能



占用D盘50G,那么D盘要分出50G,而C盘的剩余空间为90-50=40G

其它软件用户对D盘的操作空间只能小于或等于40G

如何实现???
请高手亲教,加Q:626328073
...全文
422 65 打赏 收藏 转发到动态 举报
写回复
用AI写文章
65 条回复
切换为时间正序
请发表友善的回复…
发表回复
Code従業員 2011-03-10
  • 打赏
  • 举报
回复
我们主营业务是企业ERP,基本上都是对企业数据处理的,一般遇到这样的情况,就是怕别人人为的操作造成满盘了,造成附件无法上传,我们的处理方式是——————

安装时直接将数据库设置为50G
拿凤姐抵债 2011-03-10
  • 打赏
  • 举报
回复
50楼说的很有道理。
Return门徒 2011-03-10
  • 打赏
  • 举报
回复

using (FileStream fs = File.Create("E:/aa.txt"))
{
long offset = fs.Seek(80000000000 - 1, SeekOrigin.Begin);
fs.WriteByte(new byte());
}

瞬间生成一个80000000000 B大小的文件,新测不错~!
Return门徒 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 62 楼 dong3580 的回复:]
50楼和55楼正解。可以改注册表嘛…
[/Quote]

没有那么麻烦吧

闲暇时光不想浪费吗?用《Csdn收音机》找个话题聊聊技术吧!
dong3580 2011-03-10
  • 打赏
  • 举报
回复
50楼和55楼正解。可以改注册表嘛…
苦苦挣扎中 2011-03-10
  • 打赏
  • 举报
回复
Return门徒 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 55 楼 tsapi 的回复:]
//获取文件的总大小,ok。
public long GetDirectoryLength(string dirPath){
if(!Directory.Exists(dirPath))
return 0;
long len=0;
DirectoryInfo di=new DirectoryInfo(dirPath);
foreach(FileInfo fi in di.GetFile……
[/Quote]


DriveInfo[] MyDrives = DriveInfo.GetDrives();
for (int i = 0; i < MyDrives.Length; i++)
{

if (MyDrives[i].IsReady)//判断磁盘是否存在
{
MyDrives[i].Name;//磁盘名称
MyDrives[i].TotalSize;//磁盘总大小
MyDrives[i].AvailableFreeSpace;//磁盘剩余空间
MyDrives[id].DriveType.ToString();//磁盘类型
MyDrives[id].DriveFormat;//磁盘格式
}
}

获取本地磁盘的信息就这么容易,但让看好我的问题啊~!
zengbin3013 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 50 楼 liuzhc 的回复:]
50楼说的很有道理。
[/Quote]
???50楼不是你自己吗?
ITzhangweichao 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 changling_wang 的回复:]

书写有误,都为D盘~!
[/Quote]

真该拉出去毙了。你想把我们弄死啊。
Daqing 2011-03-10
  • 打赏
  • 举报
回复
//获取文件的总大小,ok。
public long GetDirectoryLength(string dirPath){
if(!Directory.Exists(dirPath))
return 0;
long len=0;
DirectoryInfo di=new DirectoryInfo(dirPath);
foreach(FileInfo fi in di.GetFiles()){
len+=fi.Length;
}
DirectoryInfo[] dis=di.GetDirectories();
if(dis.Length>0){
for(int i=0;i<dis.Length;i++){
len+=GetDirectoryLength(dis[i].FullName);
}
}
return len;
}

//下面就获取磁盘剩余的大小
public long GetDiskFreeSpace(string diskname)
{DriveInfo drive = new DriveInfo(diskname);
long freeSpace = drive.AvailableFreeSpace;
}


//下面就获取磁盘的大小
public static long GetHardDiskSpace(string str_HardDiskName)
{
long totalSize= new long();
str_HardDiskName=str_HardDiskName +":\\";
System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
foreach (System.IO.DriveInfo drive in drives)
{
if (drive.Name == str_HardDiskName)
{
totalSize = drive.TotalSize;
}
}
return totalSize;
}

//D盘为例
if(GetHardDiskSpace("d")-GetDiskFreeSpace(D)-GetDirectoryLength("d:\")<=40*1024*1024)
{
//不写入
}
else
{
//写入
}
Return门徒 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 50 楼 liuzhc 的回复:]
50楼说的很有道理。
[/Quote]

你说的确实很有道理
qldsrx 2011-03-09
  • 打赏
  • 举报
回复
这个不是C#能实现的,必须对文件系统有研究,利用API操作文件系统来实现,研究下还原精灵估计会对你有帮助。
段传涛 2011-03-09
  • 打赏
  • 举报
回复
c# io 可以实现
VSC#2005文件与数据库存取 有介绍。 你搜搜它的电子版。 是一个台湾人写
addfox 2011-03-09
  • 打赏
  • 举报
回复
up
波导终结者 2011-03-09
  • 打赏
  • 举报
回复
记得以前某国产杀软,杀完病毒会把病毒复制一份到隔离区。那时候经常出现这样的情况:病毒比较顽固,而此国产杀软只能查,杀不掉,但是复制一份到隔离区的操作会一直进行,于是盘就满了。
说这个是想起了杀毒软件隔离区的技术,占用磁盘空间,而一般的其他软件是碰不到的。
白鸽 2011-03-09
  • 打赏
  • 举报
回复
生成一个50G的临时文件,只有这样动态的操作了吧!同意
Return门徒 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 vcacc 的回复:]
引用楼主 changling_wang 的回复:

E盘 总大小:100G 已用:50G 剩余:95G


求解
[/Quote]

书写错误
sugarbelle 2011-03-09
  • 打赏
  • 举报
回复
磁盘配额 改改注册表的事..简单.
新大小 = 原大小 - 50G
然后写进 注册表就可以了.
Return门徒 2011-03-07
  • 打赏
  • 举报
回复

书写太过匆忙了,对不起了
以上操作要用程序实现~!


[Quote=引用 6 楼 jingjiting26 的回复:]
理论上是生成一个大小为50G的虚拟文件,然后根据情况继续操作这个虚拟文件的大小。。。。大概。。。
[/Quote]

想过,不过没有什么好的办法!~
加载更多回复(22)

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧