-
大小: 54KB文件类型: .rar金币: 1下载: 0 次发布日期: 2021-06-10
- 语言: C#
- 标签: 重复文件 CreateHardLi
资源简介
你的磁盘是不是保存了很多重复的文件?分散在各个目录,不好找吧?找到了,为了保证目录的完整性,你又不能删除它?
你知道Linux的文件硬链接吗?就是给文件一个别名,多个文件名指向同一个文件内容,不重复占用空间。与快捷方式不同的是,删除快捷方式的原始文件,快捷方式就会失效。你删除硬链接其中任何一个,都不影响原始文件,直到全部文件都删除了(链接数为0)文件才会从磁盘删除。
其实Window的NTFS文件系统也支持文件硬链接的(CreateHardLink),现在就提供一个工具,以相似的文件名为基础,查找重复的文件,我们 忽略(1) 这样的重复模式文本(正则表达式为: @"(\s)|复件|\((\d)+\)"),把重复的文件改为硬链接。从而节省磁盘空间。
说明在我的BLOG中
http://blog.csdn.net/greenery/archive/2009/10/22/4714144.aspx
代码片段和文件信息
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Text.Regularexpressions;
using System.Collections;
namespace linkRepeatFile
{
public partial class Form1 : Form
{
List m_sameFiles;
public Form1()
{
InitializeComponent();
}
private void btnAnalyse_Click(object sender EventArgs e)
{
m_sameFiles = SameFiles.Analyse(txtPath.Text);
cklstSameItem.Items.Clear();
// 1 取文件列表
DirectoryInfo dir = new DirectoryInfo(txtPath.Text);
if (!dir.Exists)
{
MessageBox.Show(“directory is not exists.“);
}
List files = new List();
GetFiles(dir files);
if (files.Count < 2)
{
return;
}
// 排序
//Array.Sort(files);
// 找相似文件
//List sameFiles = new List();
Hashtable sameFiles = new Hashtable();
string key;
SameFiles value;
int index;
for (int i = 1; i < files.Count; i++)
{
key = TrimNumber(files[i].Name);
value = sameFiles[key] as SameFiles;
if (null == value)
{
value = new SameFiles(key files[i].FullName);
sameFiles.Add(key value);
}
else
{
value.Add(files[i].FullName);
if (value.SubFiles.Count==2)
{
index = cklstSameItem.Items.Add(value);
cklstSameItem.SetItemChecked(index true);
}
}
//if (IsSameFile(files[i]files[i-1]))
//{
// sameFiles[sameFiles.Count - 1].SubFiles.Add(files[i].FullName);
//}
//else
//{
// sameFiles.Add(new SameFiels(files[i].FullName));
//}
}
// 加入列表
//cklstSameItem.Items.AddRange(sameFiles.ToArray());
}
private static void GetFiles(DirectoryInfo dirList files)
{
files.AddRange(dir.GetFiles());
foreach (DirectoryInfo subDir in dir.GetDirectories())
{
GetFiles(subDir files);
}
}
static bool IsSameFile(FileInfo f1 FileInfo f2)
{
if (f1.Length != f2.Length)
return false;
string name1 = TrimNumber(Path.GetFileNameWithoutExtension(f1.Name));
string name2 = TrimNumber(Path.GetFileNameWithoutExtension(f2.Name));
//if ((name1.IndexOf(name2) >= 0) || (name2.IndexOf(name1) >= 0))
return (name1==name2);
}
// string s = TrimNumber(“aaaa(1)“);
//s = TrimNumber(“aaaa(81)“);
//s = TrimNumber(“aaaa (51)“);
private static string TrimNumber(string p)
{
string name = Path.GetFileNameWithoutExtension(p);
string ext = Path.GetExtension(p);
string trimed = Regex.Replace(name @“(\s)*\((\d)+\)“ ““ RegexOptions.Compiled);
return trimed + ext;
//Regex r = new Regex(@“(/d)+“);
//return r.Replace(p ““);
}
private void btnAutoCheck_Click(object sender EventArgs e)
{
}
private void btnlink_C
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8940 2009-10-20 17:10 Form1.Designer.cs
文件 5814 2009-10-20 17:10 Form1.resx
文件 3817 2009-10-20 16:59 li
文件 917 2009-04-21 15:15 li
..A..H. 29696 2009-10-20 17:10 li
文件 417 2009-04-21 15:15 Program.cs
文件 3431 2009-10-20 17:10 SameFiles.cs
文件 460 2009-10-20 17:02 SubFile.cs
文件 15872 2009-10-20 17:02 bin\Debug\li
文件 36352 2009-10-20 17:02 bin\Debug\li
文件 14328 2009-10-20 17:04 bin\Debug\li
文件 490 2007-07-21 01:33 bin\Debug\li
目录 0 2009-04-21 16:00 bin\Debug
目录 0 2009-04-21 15:15 bin
文件 605 2009-10-20 17:04 obj\Debug\li
文件 847 2009-07-01 12:46 obj\Debug\li
文件 15872 2009-10-20 17:02 obj\Debug\li
文件 180 2009-10-20 16:59 obj\Debug\li
文件 36352 2009-10-20 17:02 obj\Debug\li
文件 180 2009-10-20 16:59 obj\Debug\li
目录 0 2009-04-21 15:17 obj\Debug\Refactor
目录 0 2009-04-21 15:15 obj\Debug\TempPE
目录 0 2009-10-20 17:02 obj\Debug
目录 0 2009-04-21 15:15 obj
文件 1360 2009-04-21 15:15 Properties\AssemblyInfo.cs
文件 2530 2009-04-21 15:15 Properties\Resources.Designer.cs
文件 5612 2009-04-21 15:15 Properties\Resources.resx
文件 1021 2009-04-21 15:15 Properties\Settings.Designer.cs
文件 249 2009-04-21 15:15 Properties\Settings.settings
目录 0 2009-04-21 15:15 Properties
............此处省略4个文件信息
- 上一篇:使用AForge类库的视频播放C#
- 下一篇:C# 遥感影像分类
相关资源
- C#基于joyGetPos的主动方式手柄控制
- (c#)使用SHGetFileInfo获取文件或文件
-
halcon外触发get_fr
amegrabber_callback注册 -
C#代码 NIVision Image To HalconImaget Hob
- c# 监听功能键 (Get Function Key)
- gettaoinfo
- GetNetInfo
- C#通过HTTP协议get、post Webservice并返回
- C# 使用user32.dll找窗体,填数据
- httpLib网络操作通用类采集,支持get
- HttpHelper类,用来实现Http访问,Post或
- C# GET POST请求工具源码
- asp.net mvc ajax get读取服务器数据 ,p
- Asp.Net Web API GET POST
- GetHostInfo-C# Socket编程(2)识别网络主
- C# 调用系统API读写文件数据( GetPro
- C# 使用Get和Post请求获取数据
- c#写的接口请求工具http post get del pu
- c# get post 网络请求Redslide.HttpLib
评论
共有 条评论