有人可以演示如何检查一个文件的重复行,然后删除任何重复覆盖现有的文件,或删除重复的行创build一个新的文件
套接字在一定的时间之后被限制
我怎样才能让我的.NET应用程序自己擦除?
Windows任务栏中search与我自己的结果
sql Server Compact Edition数据库部署策略
任何capistrano可比的Windows / .net?
如果您使用的是.NET4,那么您可以使用File.ReadLines和File.WriteallLines的组合:
var prevIoUsLines = new HashSet<string>(); File.WriteallLines(destinationPath,File.ReadLines(sourcePath) .Where(line => prevIoUsLines.Add(line)));
它的功能与LINQ的distinct方法几乎相同,但有一个重要区别: distinct的输出不能保证与输入序列的顺序相同。 明确使用HashSet<T>确实提供了这个保证。
File.WriteallLines(topath,File.ReadAllLines(frompath).distinct().ToArray());
编辑:修改为在.net 3.5中工作
伪代码:
open file reading only List<string> list = new List<string>(); for each line in the file: if(!list.contains(line)): list.append(line) close file open file for writing for each string in list: file.write(string);
// Requires .NET 3.5 private void RemoveDuplicate(string sourceFilePath,string destinationFilePath) { var readLines = File.ReadAllLines(sourceFilePath,Encoding.Default); File.WriteallLines(destinationFilePath,readLines.distinct().ToArray(),Encoding.Default); }
我们有多大的档案?
一种策略可能是Hashset<int>读取一行,并将其加载到数据结构中,以便轻松检查现有项目,如Hashset<int> 。 我知道我可以使用GetHashCode()(可以在内部用来检查字符串相等性 – 这就是我们想要确定的重复项)可靠地散列每个字符串行,只需检查已知散列。 所以,像
var kNown = new Hashset<int>(); using (var dupe_free = new StreamWriter(@"c:pathtodupe_free.txt")) { foreach(var line in File.ReadLines(@"c:pathtohas_dupes.txt") { var hash = line.GetHashCode(); if (!kNown.Contains(hash)) { kNown.Add(hash); dupe_free.Write(line); } } }
或者,您可以利用Linq的distinct()方法,并按照Blindy的建议在一行中执行:
File.WriteallLines(@"c:pathtodupe_free.txt",File.ReadAllLines((@"c:pathtohas_dupes.txt").distinct().ToArray());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。