66 lines
2.2 KiB
C#
66 lines
2.2 KiB
C#
using System.IO;
|
||||
|
|
using PCL.Core.Logging;
|
|||
|
|
|
|||
|
|
namespace PCL;
|
|||
|
|
|
|||
|
|
internal sealed class CrashLogImporter(CrashAnalysisContext context)
|
|||
|
|
{
|
|||
|
|
public void Import(string filePath)
|
|||
|
|
{
|
|||
|
|
LogWrapper.Info("Crash", "步骤 1:自主导入日志文件");
|
|||
|
|
|
|||
|
|
if (!_TryExtractArchive(filePath))
|
|||
|
|
{
|
|||
|
|
CrashFileIo.CopyFile(filePath, Path.Combine(
|
|||
|
|
context.TempFolder,
|
|||
|
|
"Temp",
|
|||
|
|
Path.GetFileName(filePath)));
|
|||
|
|
LogWrapper.Info("Crash", "已复制导入的日志文件:" + filePath);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach (
|
|||
|
|
var targetFile in new DirectoryInfo(Path.Combine(context.TempFolder, "Temp"))
|
|||
|
|
.EnumerateFiles("*", SearchOption.AllDirectories)
|
|||
|
|
.ToList())
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (!targetFile.Exists || targetFile.Length == 0L)
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
var ext = targetFile.Extension.ToLowerInvariant();
|
|||
|
|
if (ext is ".log" or ".txt")
|
|||
|
|
context.RawFiles.Add(new CrashLogEntry(targetFile.FullName,
|
|||
|
|
CrashFileIo.ReadText(targetFile.FullName).Split("\r\n".ToCharArray())));
|
|||
|
|
else
|
|||
|
|
File.Delete(targetFile.FullName);
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
LogWrapper.Warn(ex, "Crash", "导入单个日志文件失败");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LogWrapper.Info("Crash", "步骤 1:自主导入日志文件,收集到 " + context.RawFiles.Count + " 个文件");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private bool _TryExtractArchive(string filePath)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
var info = new FileInfo(filePath);
|
|||
|
|
if (!info.Exists || info.Length <= 0L)
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
if (!CrashFileIo.CanExtractArchive(filePath))
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
CrashFileIo.ExtractFile(filePath, Path.Combine(context.TempFolder, "Temp"));
|
|||
|
|
LogWrapper.Info("Crash", "已解压导入的日志文件:" + filePath);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
LogWrapper.Warn(ex, "Crash", "尝试解压导入文件失败,将按普通文件处理(" + filePath + ")");
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|