diff --git a/TextLocator/App.xaml.cs b/TextLocator/App.xaml.cs
index aeec4417afc01cbddcdd1d41936bfc0a6756bf41..75750fd0f3b73ab52ce097521d1d4d1000f3ec92 100644
--- a/TextLocator/App.xaml.cs
+++ b/TextLocator/App.xaml.cs
@@ -119,7 +119,13 @@ namespace TextLocator
///
private void InitAppConfig()
{
- // 保存文件读取超时时间
+ // 保存缓存池容量
+ AppUtil.WriteValue("AppConfig", "CachePoolCapacity", AppConst.CACHE_POOL_CAPACITY + "");
+
+ // 每页显示条数
+ AppUtil.WriteValue("AppConfig", "ResultListPageSize", AppConst.MRESULT_LIST_PAGE_SIZE + "");
+
+ // 文件读取超时时间
AppUtil.WriteValue("AppConfig", "FileReadTimeout", AppConst.FILE_READ_TIMEOUT + "");
}
#endregion
diff --git a/TextLocator/Core/AppConst.cs b/TextLocator/Core/AppConst.cs
index 6ebd20c4c331c1547d9938c5dabe2a0ea95d58e6..ad8d23a8db7dd8c27b92d7941e69aaaa772d7ca4 100644
--- a/TextLocator/Core/AppConst.cs
+++ b/TextLocator/Core/AppConst.cs
@@ -31,11 +31,7 @@ namespace TextLocator.Core
///
/// 文件大小限制
///
- public static int FILE_SIZE_LIMIT = int.Parse(AppUtil.ReadValue("AppConfig", "FileSizeLimit", "500000000"));
- ///
- /// 压缩包解析大小
- ///
- public static int ZIP_FILE_SIZE_LIMIT = int.Parse(AppUtil.ReadValue("AppConfig", "ZipFileSizeLimit", "20000000"));
+ public static int FILE_SIZE_LIMIT = int.Parse(AppUtil.ReadValue("AppConfig", "FileSizeLimit", "200000000"));
///
/// 缓存池容量
///
@@ -47,6 +43,10 @@ namespace TextLocator.Core
///
public static readonly string APP_INDEX_DIR = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Index");
///
+ /// 临时目录:_AppDir\\_AppName\\Temp\\
+ ///
+ public static readonly string APP_TEMP_DIR = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Temp");
+ ///
/// 分词器
/// new Lucene.Net.Analysis.Cn.ChineseAnalyzer();
/// new Lucene.Net.Analysis.Standard.StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);// 用standardAnalyzer分词器
@@ -71,7 +71,7 @@ namespace TextLocator.Core
///
/// 匹配空白和换行
///
- public static readonly Regex REGEX_LINE_BREAKS_AND_WHITESPACE = new Regex(" |\r|\n|\\s");
+ public static readonly Regex REGEX_LINE_BREAKS_AND_WHITESPACE = new Regex(" |\r|\n|┄|\\s");
///
/// 匹配HTML和XML标签
///
diff --git a/TextLocator/Core/TaskTime.cs b/TextLocator/Core/TaskTime.cs
index 5bbfa4bff3d52c4e3b9f8c839336f3a8cef88f44..068f9c2397e83d7f816b508f8e5bcfa3e4a88171 100644
--- a/TextLocator/Core/TaskTime.cs
+++ b/TextLocator/Core/TaskTime.cs
@@ -7,6 +7,11 @@ namespace TextLocator.Core
///
public class TaskTime
{
+ ///
+ /// 文件大小单位
+ ///
+ private static readonly string[] suffixes = new string[] { " 秒", " 分", " 时" };
+
///
/// 开始时间
///
@@ -21,14 +26,28 @@ namespace TextLocator.Core
}
///
- /// 消耗时间
+ /// 消耗时间(友好显示)
///
- ///
- public double ConsumeTime
+ public string ConsumeTime
{
- get
- {
- return (DateTime.Now - beginTime).TotalSeconds;
+ get {
+ double time = (DateTime.Now - beginTime).TotalMilliseconds;
+ if (time > 1000)
+ {
+ if (time / 1000 < 60)
+ {
+ return time / 1000 + " 秒";
+ }
+ else if (time / 1000 / 60 < 60)
+ {
+ return time / 1000 / 60 + " 分";
+ }
+ else if (time / 1000 / 60 / 60 < 24)
+ {
+ return time / 1000 / 60 / 60 + " 时";
+ }
+ }
+ return time + " 毫秒";
}
}
diff --git a/TextLocator/Index/IndexCore.cs b/TextLocator/Index/IndexCore.cs
index 826cb2fbdd9455e7346a7df61f220ec687260836..996586a32bbfdc669b95c60a57002b24e1750f47 100644
--- a/TextLocator/Index/IndexCore.cs
+++ b/TextLocator/Index/IndexCore.cs
@@ -41,10 +41,6 @@ namespace TextLocator.Index
///
private static volatile int _totalCount = 0;
///
- /// 是否是创建
- ///
- private static volatile bool _create = false;
- ///
/// 回调函数
///
private static volatile Callback _callback;
@@ -58,7 +54,8 @@ namespace TextLocator.Index
///
/// 创建索引写入器
///
- private static void CreateIndexWriter()
+ /// 是否是创建
+ private static void CreateIndexWriter(bool create = false)
{
if (_indexWriter == null)
{
@@ -69,7 +66,7 @@ namespace TextLocator.Index
// 分词器
AppConst.INDEX_ANALYZER,
// 是否创建
- _create,
+ create,
// 字段限制
IndexWriter.MaxFieldLength.UNLIMITED);
@@ -114,22 +111,22 @@ namespace TextLocator.Index
_finishCount = 0;
// 判断是创建索引还是增量索引(如果索引目录不存在,重建)
- _create = !Directory.Exists(AppConst.APP_INDEX_DIR);
+ bool create = !Directory.Exists(AppConst.APP_INDEX_DIR);
// 入参为true,表示重建
if (rebuild)
{
- _create = rebuild;
+ create = rebuild;
}
// 创建还是更新?
- if (_create)
+ if (create)
{
// 重建时,删除全部已建索引的标记
AppUtil.DeleteSection("FileIndex");
}
// 创建索引写入器
- CreateIndexWriter();
+ CreateIndexWriter(create);
using (MutipleThreadResetEvent resetEvent = new MutipleThreadResetEvent(_totalCount))
{
@@ -138,7 +135,7 @@ namespace TextLocator.Index
{
string filePath = filePaths[i];
// 忽略已存在索引的文件
- if (SkipFile(_create, filePath, resetEvent))
+ if (SkipFile(create, filePath, resetEvent))
{
continue;
}
@@ -248,7 +245,7 @@ namespace TextLocator.Index
// 文件内容
string content = FileInfoServiceFactory.GetFileContent(filePath);
- msg.Append(",解析:" + taskMark.ConsumeTime + "秒");
+ msg.Append(",解析:" + taskMark.ConsumeTime);
// 判断文件内容
if (!string.IsNullOrEmpty(content))
{
@@ -284,7 +281,7 @@ namespace TextLocator.Index
// 执行删除、添加逻辑
AddDocument(filePath, doc);
}
- msg.Append(",索引:" + taskMark.ConsumeTime + "秒");
+ msg.Append(",索引:" + taskMark.ConsumeTime);
}
else
{
diff --git a/TextLocator/MainWindow.xaml.cs b/TextLocator/MainWindow.xaml.cs
index 9bf6ab472008614285dbb1159ad01ee7c711f61a..f9d796e47c0c5a6e6dae922ac21cb1c3ec24c183 100644
--- a/TextLocator/MainWindow.xaml.cs
+++ b/TextLocator/MainWindow.xaml.cs
@@ -176,7 +176,7 @@ namespace TextLocator
{
SortOptions.Items.Add(sort);
}
- log.Debug("InitializeSortType 耗时:" + taskTime.ConsumeTime + "秒");
+ log.Debug("InitializeSortType 耗时:" + taskTime.ConsumeTime + "。");
}
///
@@ -231,7 +231,7 @@ namespace TextLocator
Background = Brushes.DarkGray
});
}
- log.Debug("InitializeFileTypeFilters 耗时:" + taskTime.ConsumeTime + "秒");
+ log.Debug("InitializeFileTypeFilters 耗时:" + taskTime.ConsumeTime + "。");
}
///
@@ -275,7 +275,7 @@ namespace TextLocator
ExclusionPaths.Text = exclusionPaths;
ExclusionPaths.ToolTip = ExclusionPaths.Text;
- log.Debug("InitializeAppConfig 耗时:" + taskTime.ConsumeTime + "秒");
+ log.Debug("InitializeAppConfig 耗时:" + taskTime.ConsumeTime + "。");
}
#endregion
@@ -587,7 +587,7 @@ namespace TextLocator
this.SwitchPreview.Visibility = totalHits > 0 ? Visibility.Visible : Visibility.Hidden;
}));
- string msg = "检索完成。分词:( " + text + " ),结果:" + totalHits + "个符合条件的结果 (第 " + pageNow + " 页),耗时:" + taskMark.ConsumeTime + "秒。";
+ string msg = "检索完成。分词:( " + text + " ),结果:" + totalHits + "个符合条件的结果 (第 " + pageNow + " 页),耗时:" + taskMark.ConsumeTime + "。";
log.Debug(msg);
@@ -1162,7 +1162,7 @@ namespace TextLocator
// 获取文件信息列表
FileUtil.GetAllFiles(filePaths, s, _regexExclusionFolder);
}
- log.Debug("GetFiles 耗时:" + fileMark.ConsumeTime + "秒");
+ log.Debug("GetFiles 耗时:" + fileMark.ConsumeTime + "。");
ShowStatus("文件扫描完成,开始" + tips + "索引...");
// 验证扫描文件列表是否为空
@@ -1189,7 +1189,7 @@ namespace TextLocator
// 创建索引方法
IndexCore.CreateIndex(filePaths, rebuild, ShowStatus);
- string msg = "索引" + tips + "完成。共用时:" + taskMark.ConsumeTime + "秒";
+ string msg = "索引" + tips + "完成。共用时:" + taskMark.ConsumeTime + "。";
// 显示状态
ShowStatus(msg);
diff --git a/TextLocator/Properties/AssemblyInfo.cs b/TextLocator/Properties/AssemblyInfo.cs
index 666cd99530fb84c218beae01cab722fa47d4a069..90a184a2a44ec1ae3da446f288198301005ea4f2 100644
--- a/TextLocator/Properties/AssemblyInfo.cs
+++ b/TextLocator/Properties/AssemblyInfo.cs
@@ -49,8 +49,8 @@ using System.Windows;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.2.11")]
-[assembly: AssemblyFileVersion("1.2.11.0")]
+[assembly: AssemblyVersion("1.2.12")]
+[assembly: AssemblyFileVersion("1.2.12.0")]
// log4net
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
\ No newline at end of file
diff --git a/TextLocator/Service/DevelopFileService.cs b/TextLocator/Service/DevelopFileService.cs
index 2e3d6b377b199f88e7adcc13aa29496aa7c24a91..eb57d5a84818473dfd2faa52f6df323332d4c475 100644
--- a/TextLocator/Service/DevelopFileService.cs
+++ b/TextLocator/Service/DevelopFileService.cs
@@ -22,12 +22,15 @@ namespace TextLocator.Service
StringBuilder builder = new StringBuilder();
try
{
- using (StreamReader reader = new StreamReader(new FileStream(filePath, FileMode.Open, FileAccess.Read), Encoding.UTF8))
+ using (FileStream fs = File.OpenRead(filePath))
{
- string line;
- while ((line = reader.ReadLine()) != null)
+ using (StreamReader reader = new StreamReader(fs, Encoding.UTF8))
{
- builder.Append(AppConst.REGEX_TAG.Replace(line, ""));
+ string line;
+ while ((line = reader.ReadLine()) != null)
+ {
+ builder.AppendLine(AppConst.REGEX_TAG.Replace(line, ""));
+ }
}
}
}
diff --git a/TextLocator/Service/DomFileService.cs b/TextLocator/Service/DomFileService.cs
index 30c6d104f81a7da2547788c1e80bc8ff67119d8f..350c00dae9696c07b61d2ccd9916f516ea66c97d 100644
--- a/TextLocator/Service/DomFileService.cs
+++ b/TextLocator/Service/DomFileService.cs
@@ -22,12 +22,15 @@ namespace TextLocator.Service
StringBuilder builder = new StringBuilder();
try
{
- using (StreamReader reader = new StreamReader(new FileStream(filePath, FileMode.Open, FileAccess.Read), Encoding.UTF8))
+ using (FileStream fs = File.OpenRead(filePath))
{
- string line;
- while((line = reader.ReadLine()) != null)
+ using (StreamReader reader = new StreamReader(fs, Encoding.UTF8))
{
- builder.Append(AppConst.REGEX_TAG.Replace(line, ""));
+ string line;
+ while ((line = reader.ReadLine()) != null)
+ {
+ builder.AppendLine(AppConst.REGEX_TAG.Replace(line, ""));
+ }
}
}
}
diff --git a/TextLocator/Service/ExcelFileService.cs b/TextLocator/Service/ExcelFileService.cs
index d2e1d06aeddae45e6cd517ce5fdf13540832550b..ac333ffd46d7d730d3e261c1476f6c91cc0796f4 100644
--- a/TextLocator/Service/ExcelFileService.cs
+++ b/TextLocator/Service/ExcelFileService.cs
@@ -28,7 +28,7 @@ namespace TextLocator.Service
{
// =========== NPIO ===========
// 文件流
- using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
+ using (FileStream fs = File.OpenRead(filePath))
{
// 获取扩展名
string extName = Path.GetExtension(filePath);
@@ -38,11 +38,11 @@ namespace TextLocator.Service
{
// 把xls写入workbook中 2003版本
case ".xls":
- readWorkbook = new HSSFWorkbook(fileStream);
+ readWorkbook = new HSSFWorkbook(fs);
break;
// 把xlsx 写入workbook中 2007版本
case ".xlsx":
- readWorkbook = new XSSFWorkbook(fileStream);
+ readWorkbook = new XSSFWorkbook(fs);
break;
default:
break;
@@ -97,40 +97,43 @@ namespace TextLocator.Service
try
{
// =========== Spire.XLS ===========
- // 创建Workbook对象
- using (Spire.Xls.Workbook workbook = new Spire.Xls.Workbook())
+ using (FileStream fs = File.OpenRead(filePath))
{
- // 加载Excel文档
- workbook.LoadFromFile(filePath);
- StringBuilder builder = new StringBuilder();
- if (workbook != null)
+ // 创建Workbook对象
+ using (Spire.Xls.Workbook workbook = new Spire.Xls.Workbook())
{
- WorksheetsCollection sheets = workbook.Worksheets;
- if (sheets != null && sheets.Count > 0)
+ // 加载Excel文档
+ workbook.LoadFromStream(fs);
+ StringBuilder builder = new StringBuilder();
+ if (workbook != null)
{
- // 获取工作表
- for (int i = 0; i < sheets.Count; i++)
+ WorksheetsCollection sheets = workbook.Worksheets;
+ if (sheets != null && sheets.Count > 0)
{
- using (Spire.Xls.Worksheet sheet = sheets[i])
+ // 获取工作表
+ for (int i = 0; i < sheets.Count; i++)
{
- // 行
- for (int j = sheet.FirstRow; j < sheet.LastRow; j++)
+ using (Spire.Xls.Worksheet sheet = sheets[i])
{
- using (Spire.Xls.CellRange row = sheet.Rows[j])
+ // 行
+ for (int j = sheet.FirstRow; j < sheet.LastRow; j++)
{
- // 列
- for (int k = 0; k < row.Columns.Length; k++)
+ using (Spire.Xls.CellRange row = sheet.Rows[j])
{
- builder.Append(row.Columns[k].Value2.ToString() + " ");
+ // 列
+ for (int k = 0; k < row.Columns.Length; k++)
+ {
+ builder.Append(row.Columns[k].Value2.ToString() + " ");
+ }
}
+ builder.AppendLine();
}
- builder.AppendLine();
}
}
}
}
+ content = builder.ToString();
}
- content = builder.ToString();
}
}
catch (Exception ex)
diff --git a/TextLocator/Service/NoTextFileService.cs b/TextLocator/Service/NoTextFileService.cs
index c4deb201a17403caab962d9a4f45df7329e1f5ca..59990a08201bb0becfff1e2c5f5ebb9b1622a915 100644
--- a/TextLocator/Service/NoTextFileService.cs
+++ b/TextLocator/Service/NoTextFileService.cs
@@ -17,7 +17,7 @@ namespace TextLocator.Service
try
{
System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
- string fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1);
+ string fileName = fileInfo.Name;
StringBuilder builder = new StringBuilder();
builder.Append("文件名称:" + fileName);
builder.Append(";更新时间:" + fileInfo.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss"));
diff --git a/TextLocator/Service/PdfFileService.cs b/TextLocator/Service/PdfFileService.cs
index 3d3434df9ccccc4472656061db4255952ca307a8..0efb24a5ca69af2ddba34cb4ecfc20d3b19e5556 100644
--- a/TextLocator/Service/PdfFileService.cs
+++ b/TextLocator/Service/PdfFileService.cs
@@ -24,20 +24,23 @@ namespace TextLocator.Service
{
try
{
-
- // 实例化一个PdfDocument对象
- using (PdfDocument doc = new PdfDocument(new FileStream(filePath, FileMode.Open, FileAccess.Read)))
+ using (FileStream fs = File.OpenRead(filePath))
{
- PdfPageCollection pages = doc.Pages;
- if (pages != null && pages.Count > 0)
+ // 实例化一个PdfDocument对象
+ using (PdfDocument doc = new PdfDocument(fs))
{
- //提取PDF所有页面的文本
- foreach (PdfPageBase page in pages)
+ PdfPageCollection pages = doc.Pages;
+ if (pages != null && pages.Count > 0)
{
- try
+ //提取PDF所有页面的文本
+ foreach (PdfPageBase page in pages)
{
- builder.Append(page.ExtractText().Replace("Evaluation Warning : The document was created with Spire.PDF for .NET.", ""));
- } catch { }
+ try
+ {
+ builder.Append(page.ExtractText().Replace("Evaluation Warning : The document was created with Spire.PDF for .NET.", ""));
+ }
+ catch { }
+ }
}
}
}
diff --git a/TextLocator/Service/PowerPointFileService.cs b/TextLocator/Service/PowerPointFileService.cs
index d51408f703c66751c73b5079ef99ad324558d263..0df7d63de10db4a4c4f6ee6f5a13e497f6ef7359 100644
--- a/TextLocator/Service/PowerPointFileService.cs
+++ b/TextLocator/Service/PowerPointFileService.cs
@@ -24,40 +24,43 @@ namespace TextLocator.Service
{
try
{
- using (Presentation presentation = new Presentation(new FileStream(filePath, FileMode.Open, FileAccess.Read), FileFormat.Auto))
+ using (FileStream fs = File.OpenRead(filePath))
{
- SlideCollection slides = presentation.Slides;
- if (slides != null && slides.Count > 0)
+ using (Presentation presentation = new Presentation(fs, FileFormat.Auto))
{
- foreach (ISlide slide in presentation.Slides)
+ SlideCollection slides = presentation.Slides;
+ if (slides != null && slides.Count > 0)
{
- ShapeCollection shapes = slide.Shapes;
- if (shapes != null && shapes.Count > 0)
+ foreach (ISlide slide in presentation.Slides)
{
- foreach (IShape shape in shapes)
+ ShapeCollection shapes = slide.Shapes;
+ if (shapes != null && shapes.Count > 0)
{
- if (shape != null && shape is IAutoShape)
+ foreach (IShape shape in shapes)
{
- ITextFrameProperties textFrame;
- if ((textFrame = (shape as IAutoShape).TextFrame) != null)
+ if (shape != null && shape is IAutoShape)
{
- ParagraphCollection paragraph = textFrame.Paragraphs;
- if (paragraph != null && paragraph.Count > 0)
+ ITextFrameProperties textFrame;
+ if ((textFrame = (shape as IAutoShape).TextFrame) != null)
{
- foreach (TextParagraph tp in paragraph)
+ ParagraphCollection paragraph = textFrame.Paragraphs;
+ if (paragraph != null && paragraph.Count > 0)
{
- builder.Append(tp.Text + Environment.NewLine);
+ foreach (TextParagraph tp in paragraph)
+ {
+ builder.Append(tp.Text + Environment.NewLine);
+ }
}
}
}
+ shape.Dispose();
}
- shape.Dispose();
}
+ slide.Dispose();
}
- slide.Dispose();
}
+
}
-
}
}
catch (Exception ex)
diff --git a/TextLocator/Service/TxtFileService.cs b/TextLocator/Service/TxtFileService.cs
index ebce22592f79b2906c36fd298f67fd91e7ae8401..8bce107cc0bd87d98bd28960e1dd4938758b2dbc 100644
--- a/TextLocator/Service/TxtFileService.cs
+++ b/TextLocator/Service/TxtFileService.cs
@@ -20,12 +20,15 @@ namespace TextLocator.Service
StringBuilder builder = new StringBuilder();
try
{
- using (StreamReader reader = new StreamReader(new FileStream(filePath, FileMode.Open, FileAccess.Read), Encoding.UTF8))
+ using (FileStream fs = File.OpenRead(filePath))
{
- string line;
- while((line = reader.ReadLine()) != null)
+ using (StreamReader reader = new StreamReader(fs, Encoding.UTF8))
{
- builder.Append(line);
+ string line;
+ while ((line = reader.ReadLine()) != null)
+ {
+ builder.AppendLine(line);
+ }
}
}
}
diff --git a/TextLocator/Service/WordFileService.cs b/TextLocator/Service/WordFileService.cs
index d355ad404c431a76b4d798bcfd0e701b1cf20356..461660a872b4a3b60de716427c9d8eb3b43de22e 100644
--- a/TextLocator/Service/WordFileService.cs
+++ b/TextLocator/Service/WordFileService.cs
@@ -28,22 +28,25 @@ namespace TextLocator.Service
try
{
// =========== Spire.XLS ===========
- using (Spire.Doc.Document document = new Spire.Doc.Document(new FileStream(filePath, FileMode.Open, FileAccess.Read)))
+ using (FileStream fs = File.OpenRead(filePath))
{
- if (document != null)
+ using (Spire.Doc.Document document = new Spire.Doc.Document(fs))
{
- SectionCollection sections = document.Sections;
- if (sections != null && sections.Count > 0)
+ if (document != null)
{
- // 提取每个段落的文本
- foreach (Section section in sections)
+ SectionCollection sections = document.Sections;
+ if (sections != null && sections.Count > 0)
{
- ParagraphCollection paragraphs = section.Paragraphs;
- if (paragraphs != null && paragraphs.Count > 0)
+ // 提取每个段落的文本
+ foreach (Section section in sections)
{
- foreach (Paragraph paragraph in paragraphs)
+ ParagraphCollection paragraphs = section.Paragraphs;
+ if (paragraphs != null && paragraphs.Count > 0)
{
- builder.AppendLine(paragraph.Text);
+ foreach (Paragraph paragraph in paragraphs)
+ {
+ builder.AppendLine(paragraph.Text);
+ }
}
}
}
@@ -57,9 +60,9 @@ namespace TextLocator.Service
XWPFDocument document = null;
try
{
- using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
+ using (FileStream fs = File.OpenRead(filePath))
{
- document = new XWPFDocument(file);
+ document = new XWPFDocument(fs);
if (document != null)
{
diff --git a/TextLocator/Service/ZipFileService.cs b/TextLocator/Service/ZipFileService.cs
index fda4e9d45dd46ec249db5508258d3fba3d5922e9..9d659310833ea43415b2d6c677181732ae79561e 100644
--- a/TextLocator/Service/ZipFileService.cs
+++ b/TextLocator/Service/ZipFileService.cs
@@ -8,6 +8,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TextLocator.Core;
+using TextLocator.Enums;
using TextLocator.Exceptions;
using TextLocator.Factory;
using TextLocator.Util;
@@ -31,19 +32,29 @@ namespace TextLocator.Service
{
try
{
+ // 文件信息
+ FileInfo fileInfo = new FileInfo(filePath);
+ // 文件名称
+ string fileName = fileInfo.Name;
+ // 文件大小
+ long fileSize = fileInfo.Length;
+
// 压缩包解压
- builder.Append("名称:" + filePath.Substring(filePath.LastIndexOf("\\") + 1));
- builder.Append(" 大小:" + FileUtil.GetFileSizeFriendly(new FileInfo(filePath).Length) + " =>\r\n");
+ builder.Append("名称:" + fileName);
+ builder.Append(" 大小:" + FileUtil.GetFileSizeFriendly(fileInfo.Length));
+ builder.Append(" 列表:=> \r\n");
- builder.Append(" 列表:=>\r\n");
- using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
+ // 解析列表
+ using (FileStream file = File.OpenRead(filePath))
{
- using (var archive = ArchiveFactory.Open(file)) {
+ using (var archive = ArchiveFactory.Open(file))
+ {
foreach (var entry in archive.Entries)
{
if (!entry.IsDirectory)
{
- builder.Append(String.Format(" {0}, {1}\r\n", entry.Key, FileUtil.GetFileSizeFriendly(entry.Size)));
+ builder.Append("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄\r\n");
+ builder.Append(string.Format("{0}, {1}\r\n", entry.Key, FileUtil.GetFileSizeFriendly(entry.Size)));
}
}
}
diff --git a/TextLocator/SettingWindow.xaml b/TextLocator/SettingWindow.xaml
index 53a033cc22972ff105733e18350101500e620e11..05b8fa0ad49eef6271d29e28426ab6ae1e8dd3fc 100644
--- a/TextLocator/SettingWindow.xaml
+++ b/TextLocator/SettingWindow.xaml
@@ -19,50 +19,51 @@
-
+
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
diff --git a/TextLocator/SettingWindow.xaml.cs b/TextLocator/SettingWindow.xaml.cs
index 947127b7ddda1433e4963ab387ec66ca897e28b2..4321b695c4bc2d4207705f310c774452d7e2dde4 100644
--- a/TextLocator/SettingWindow.xaml.cs
+++ b/TextLocator/SettingWindow.xaml.cs
@@ -81,17 +81,6 @@ namespace TextLocator
// 线程池
string minThreadsText = this.MinThreads.Text;
string maxThreadsText = this.MaxThreads.Text;
-
- // 每页显示条数
- string ResultListPageSizeText = this.ResultListPageSize.Text;
-
- // 文件读取超时时间
- string fileReadTimeoutText = this.FileReadTimeout.Text;
-
- // 缓存池容量
- string cachePoolCapacityText = this.CachePoolCapacity.Text;
-
- // 转换,验证
int minThreads = 0;
try
{
@@ -126,6 +115,26 @@ namespace TextLocator
}
}
+ // 缓存池容量
+ string cachePoolCapacityText = this.CachePoolCapacity.Text;
+ int cachePoolCapacity = 0;
+ try
+ {
+ cachePoolCapacity = int.Parse(cachePoolCapacityText);
+ }
+ catch
+ {
+ Message.ShowWarning("MessageContainer", "缓存池容量设置错误");
+ return;
+ }
+ if (cachePoolCapacity < 50000 || cachePoolCapacity > 500000)
+ {
+ Message.ShowWarning("MessageContainer", "建议设置在5-50W范围内");
+ return;
+ }
+
+ // 每页显示条数
+ string ResultListPageSizeText = this.ResultListPageSize.Text;
int ResultListPageSize = 0;
try
{
@@ -142,6 +151,8 @@ namespace TextLocator
return;
}
+ // 文件读取超时时间
+ string fileReadTimeoutText = this.FileReadTimeout.Text;
int fileReadTimeout = 0;
try
{
@@ -158,39 +169,23 @@ namespace TextLocator
return;
}
- int cachePoolCapacity = 0;
- try
- {
- cachePoolCapacity = int.Parse(cachePoolCapacityText);
- } catch
- {
- Message.ShowWarning("MessageContainer", "缓存池容量设置错误");
- return;
- }
- if (cachePoolCapacity < 50000 || cachePoolCapacity > 500000)
- {
- Message.ShowWarning("MessageContainer", "建议设置在5-50w范围内");
- return;
- }
-
// 刷新、保存
AppConst.THREAD_POOL_MIN_SIZE = minThreads;
AppConst.THREAD_POOL_MAX_SIZE = maxThreads;
AppCore.SetThreadPoolSize();
+ AppConst.CACHE_POOL_CAPACITY = cachePoolCapacity;
+ AppUtil.WriteValue("AppConfig", "CachePoolCapacity", AppConst.CACHE_POOL_CAPACITY + "");
+ log.Debug("修改缓存池容量:" + AppConst.CACHE_POOL_CAPACITY);
+
AppConst.MRESULT_LIST_PAGE_SIZE = ResultListPageSize;
AppUtil.WriteValue("AppConfig", "ResultListPageSize", AppConst.MRESULT_LIST_PAGE_SIZE + "");
log.Debug("修改结果列表分页条数:" + AppConst.MRESULT_LIST_PAGE_SIZE);
-
AppConst.FILE_READ_TIMEOUT = fileReadTimeout;
AppUtil.WriteValue("AppConfig", "FileReadTimeout", AppConst.FILE_READ_TIMEOUT + "");
log.Debug("修改文件读取超时时间:" + AppConst.FILE_READ_TIMEOUT);
- AppConst.CACHE_POOL_CAPACITY = cachePoolCapacity;
- AppUtil.WriteValue("AppConfig", "CachePoolCapacity", AppConst.CACHE_POOL_CAPACITY + "");
- log.Debug("修改缓存池容量:" + AppConst.CACHE_POOL_CAPACITY);
-
this.Close();
}
#endregion
diff --git a/TextLocator/Util/FileUtil.cs b/TextLocator/Util/FileUtil.cs
index 735106e6e37545be1ee306de53db1da7b795c996..bf1bc9ca78f2d6d34d0398294103766a2de7c71b 100644
--- a/TextLocator/Util/FileUtil.cs
+++ b/TextLocator/Util/FileUtil.cs
@@ -199,23 +199,13 @@ namespace TextLocator.Util
{
return;
}
- // 获取源文件夹中的所有文件完整路径
- FileInfo[] files = new DirectoryInfo(srcDir).GetFiles();
- foreach (FileInfo fileInfo in files)
- {
- try
- {
- File.Delete(fileInfo.FullName);
- }
- catch (Exception ex)
- {
- log.Error("文件删除失败:" + ex.Message, ex);
- }
- }
try
{
- File.Delete(srcDir);
- } catch { }
+ DirectoryInfo dirInfo = new DirectoryInfo(srcDir);
+ dirInfo.Delete(true);
+ } catch (Exception ex) {
+ log.Error(srcDir + " -> 目录删除失败:" + ex.Message, ex);
+ }
}
///
diff --git a/TextLocator/Util/RichTextBoxUtil.cs b/TextLocator/Util/RichTextBoxUtil.cs
index aa4fa9b38885d1bb874085fbc7f4d23869185128..8753a42c64cbb2e064aaf7a8948d66567ebc3f4a 100644
--- a/TextLocator/Util/RichTextBoxUtil.cs
+++ b/TextLocator/Util/RichTextBoxUtil.cs
@@ -1,4 +1,7 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
@@ -46,18 +49,18 @@ namespace TextLocator.Util
TextPointer position = richTextBox.Document.ContentStart;
while (position != null)
{
- //向前搜索,需要内容为Text
+ // 向前搜索,需要内容为Text
if (position.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
{
- //拿出Run的Text
+ // 拿出Run的Text
string text = position.GetTextInRun(LogicalDirection.Forward);
- //可能包含多个keyword,做遍历查找
- int index = text.IndexOf(keyword, 0);
+ // 可能包含多个keyword,做遍历查找
+ int index = text.IndexOf(keyword, 0, StringComparison.CurrentCultureIgnoreCase);
if (index != -1)
{
TextPointer start = position.GetPositionAtOffset(index);
TextPointer end = start.GetPositionAtOffset(keyword.Length);
- position = selecta(richTextBox, color, start, end, background);
+ position = Selecta(richTextBox, color, start, end, background);
}
}
// 文字指针向前偏移
@@ -72,11 +75,10 @@ namespace TextLocator.Util
///
/// 元素
/// 颜色
- /// 选择长度
/// 内容指针开始位置
/// 内容指针结束位置
///
- private static TextPointer selecta(RichTextBox richTextBox, Color color, TextPointer tpStart, TextPointer tpEnd, bool background)
+ private static TextPointer Selecta(RichTextBox richTextBox, Color color, TextPointer tpStart, TextPointer tpEnd, bool background)
{
TextRange range = richTextBox.Selection;
range.Select(tpStart, tpEnd);