上一篇文章介绍了基于BencodeNET程序集解析并显示Torrent文件中的文件清单,本文在此基础上检查本地磁盘是否已存在Torrent文件中列出的文件,重点显示那些未下载过的文件。
程序的主要功能包括:
1)选择并解析Torrent文件,支持查看Torrent文件内容,本部分功能复用上一篇文章中的代码;
2)支持从本地多个文件夹中搜索是否存在本地文件;
3)支持去掉Torrent文件中的文件名的开头和结尾部分,便于搜索本地文件夹中的同名文件(这里还可以优化,指定正则表达式,不过没有做);
4)按多种方式查看检索结果。
程序的逻辑不复杂,用的都是.net的基本函数,主要代码如下:
public class FindRecord
{
public FindRecord()
{ }
public int Index;
public string TorrentFileName;
public string ProcessedFileName;
public string FileExtension;
public string TorrentFullPath;
public string LocaFilePath;
}
...
...
foreach (MultiFileInfo f in m_torrentFileInfo.Files)
{
FindRecord fr = new FindRecord();
fr.TorrentFileName = f.FileName;
fr.TorrentFullPath = f.FullPath;
fr.Index = m_lstFindResults.Count + 1;
fr.ProcessedFileName = Path.GetFileNameWithoutExtension(fr.TorrentFileName);
fr.FileExtension = Path.GetExtension(fr.TorrentFileName);
if (cbRemovePrefix.Checked &&
!string.IsNullOrEmpty(txtRemovePrefix.Text) &&
fr.ProcessedFileName.StartsWith(txtRemovePrefix.Text))
{
fr.ProcessedFileName = fr.ProcessedFileName.Substring(txtRemovePrefix.Text.Length);
}
if(cbRemovePostfix.Checked &&
!string.IsNullOrEmpty(txtRemovePostfix.Text) &&
fr.ProcessedFileName.EndsWith(txtRemovePostfix.Text))
{
fr.ProcessedFileName = fr.ProcessedFileName.Substring(0, fr.ProcessedFileName.Length - txtRemovePostfix.Text.Length);
}
foreach(string findDir in lstFindPathes.Items)
{
string[] searchResult = Directory.GetFiles(findDir, fr.ProcessedFileName + fr.FileExtension, SearchOption.AllDirectories);
if(searchResult==null || searchResult.Length<=0)
{
continue;
}
fr.LocaFilePath = searchResult[0];
break;
}
m_lstFindResults.Add(fr);
}
DisplayResult(m_lstFindResults, GetFilterOption());
...
...
程序的运行效果如下图所示,代码已上传至GitHub,地址为:https://github.com/guochao2299/TorrentInfoReader