• 大小: 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  linkRepeatFile.csproj

     文件        917  2009-04-21 15:15  linkRepeatFile.sln

    ..A..H.     29696  2009-10-20 17:10  linkRepeatFile.suo

     文件        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\linkRepeatFile.exe

     文件      36352  2009-10-20 17:02  bin\Debug\linkRepeatFile.pdb

     文件      14328  2009-10-20 17:04  bin\Debug\linkRepeatFile.vshost.exe

     文件        490  2007-07-21 01:33  bin\Debug\linkRepeatFile.vshost.exe.manifest

     目录          0  2009-04-21 16:00  bin\Debug

     目录          0  2009-04-21 15:15  bin

     文件        605  2009-10-20 17:04  obj\Debug\linkRepeatFile.csproj.FileListAbsolute.txt

     文件        847  2009-07-01 12:46  obj\Debug\linkRepeatFile.csproj.GenerateResource.Cache

     文件      15872  2009-10-20 17:02  obj\Debug\linkRepeatFile.exe

     文件        180  2009-10-20 16:59  obj\Debug\linkRepeatFile.Form1.resources

     文件      36352  2009-10-20 17:02  obj\Debug\linkRepeatFile.pdb

     文件        180  2009-10-20 16:59  obj\Debug\linkRepeatFile.Properties.Resources.resources

     目录          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个文件信息

评论

共有 条评论