我有需要搜索的zip文件我有使用System.IO.Compression的.NET 4.5的工作代碼,它的工作原理完美,但似乎無法使其工作在.NET 3.5.NET 3.5 DotNetZip通過提取的文件進行搜索
這裏使用DotNetZip是我的代碼
di = new DirectoryInfo(sFullLogPath + "\\");
files = di.GetFiles(sExtension);
logs.Info("Searching " + sType + " logs on " + sDate + " for " + sSearchTerm);
Console.WriteLine("");
try
{
foreach(var file in files)
{
//Console.WriteLine(file.FullName);
using (ZipFile archive = ZipFile.Read(sFullLogPath + "\\" + file.Name))
{
foreach(var entry in archive)
{
if(entry.FileName.EndsWith(".ininlog",StringComparison.OrdinalIgnoreCase))
{
//Console.WriteLine(entry.FileName);
try
{
Directory.CreateDirectory(sTemp);
entry.Extract(Path.Combine(sTemp, entry.FileName));
Stream streamTemp = new FileStream(file.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader streamReader = new StreamReader(streamTemp);
string line;
while ((line = streamReader.ReadLine()) != null)
{
if (line.Contains(sSearchTerm))
{ logs.Info("{0} contains \"{1}\"", file.Name, sSearchTerm); break; }
else
{ Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("{0} does not contain \"{1}\"", file.Name, sSearchTerm); Console.ResetColor(); break; }
}
}
catch (UnauthorizedAccessException ae)
{
logs.Error(ae.Message);
}
catch (SystemException se)
{
logs.Error(se.Message);
}
catch (ApplicationException ape)
{
logs.Error(ape.Message);
}
catch (Exception e)
{
logs.Error(e.Message);
}
finally
{
Directory.Delete(sTemp, true);
archive.Dispose();
}
}
}
}
}
}
catch (UnauthorizedAccessException ae)
{
logs.Error(ae.Message);
}
catch (SystemException se)
{
logs.Error(se.Message);
}
catch (ApplicationException ape)
{
logs.Error(ape.Message);
}
catch (Exception e)
{
logs.Error(e.Message);
}
預期的行爲:
目錄中的每一個壓縮文件解壓縮到一個臨時位置,然後進行搜索,看是否字符串是在文件,如果找到它會輸出f的名字ILE它在
發現當前的行爲:
沒有找到和引用到我要找的字符串,即使我知道它的存在,它在同一文件上工作正常與.NET 4.5版本
我爲什麼不使用.NET 4.5,我們有我們的服務器上的定製軟件,目前擁有與.NET 4.5
感謝@Thomas固定編碼的問題 - 看起來像其他人造成此假積極的
else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("{0} does not contain \"{1}\"", file.Name, sSearchTerm); Console.ResetColor(); break; }
這裏是固定的代碼
di = new DirectoryInfo(sFullLogPath + "\\");
files = di.GetFiles(sExtension);
logs.Info("Searching " + sType + " logs on " + sDate + " for " + sSearchTerm);
Console.WriteLine("");
try
{
foreach(var file in files)
{
//Console.WriteLine(file.Name);
using (ZipFile archive = ZipFile.Read(file.FullName))
{
foreach(var entry in archive)
{
if(entry.FileName.EndsWith(".ininlog", StringComparison.OrdinalIgnoreCase))
{
try
{
using (var tempStream = entry.OpenReader())
using (var streamReader = new StreamReader(tempStream))
{
string line;
while ((line = streamReader.ReadLine()) != null)
{
if(line.Contains(sSearchTerm))
{
logs.Info("{0} contains \"{1}\"", file.Name, sSearchTerm);
break;
}
}
}
}
catch (UnauthorizedAccessException ae)
{
logs.Error(ae.Message);
}
catch (SystemException se)
{
logs.Error(se.Message);
}
catch (ApplicationException ape)
{
logs.Error(ape.Message);
}
catch (Exception e)
{
logs.Error(e.Message);
}
finally
{
archive.Dispose();
//Directory.Delete(sTemp + "\\" + entry.FileName);
}
}
}
}
}
}
catch (UnauthorizedAccessException ae)
{
logs.Error(ae.Message);
}
catch (SystemException se)
{
logs.Error(se.Message);
}
catch (ApplicationException ape)
{
logs.Error(ape.Message);
}
catch (Exception e)
{
logs.Error(e.Message);
}
finally
{
//
}
break;
你應該調試你的代碼,並找出問題是否與壓縮/解壓部分或搜索。也看起來像Thomas Levesque答案顯示的問題(當你試圖搜索ZIP文本文件的字符串)。 – 2014-08-29 20:02:44