資源簡介
你的磁盤是不是保存了很多重復的文件?分散在各個目錄,不好找吧?找到了,為了保證目錄的完整性,你又不能刪除它?
你知道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? {
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# 遙感影像分類
評論
共有 條評論