public async Task CreatePageLinksMap(FileInfo file, DUMP_TYPE type) { // Create map file with page links Dictionary <string, HashSet <string> > pageToPageLinkIndex = new Dictionary <string, HashSet <string> >(); using (StreamReader sr = new StreamReader(file.FullName)) { while (sr.Peek() >= 0) { var line = await sr.ReadLineAsync(); if (!line.StartsWith("INSERT INTO") || line.Split(' ').Length != 5) { continue; } string[] separatingStrings = { "),(" }; var inserts = string.Join("", line.Split(' ').Skip(4)); var values = inserts.Split(separatingStrings, System.StringSplitOptions.RemoveEmptyEntries); string to_page_id; foreach (string value in values) { var data = value.Split(','); var from_page_id = new String(data[0].Where(Char.IsDigit).ToArray()); var to_page_title = data[2].Trim('\''); if (data[1] == "0" && data[3] == "0") { pageTitles.TryGetValue(to_page_title, out to_page_id); if (to_page_id != null && pageIDs.ContainsKey(from_page_id)) { if (!pageToPageLinkIndex.ContainsKey(from_page_id)) { pageToPageLinkIndex[from_page_id] = new HashSet <string>(); } pageToPageLinkIndex[from_page_id].Add(to_page_id); } } } } } using (StreamWriter sw = new StreamWriter(file.FullName.Substring(0, file.FullName.Length - 4) + ".map")) { foreach (KeyValuePair <string, HashSet <string> > from_page in pageToPageLinkIndex) { await sw.WriteLineAsync(from_page.Key + "\t" + string.Join(",", from_page.Value)); } } window.UpdateProgress(3, 1, "Processed " + (++filesCreated) + " out of " + numberOfFiles + " files"); }
//------------------------------------------------------------------------------------------------------ /// <summary> /// Дамп записывается в файл с уникальным названием (FileName), /// который будет храниться в той же директории, что и exe файл. /// Перед тем как вызвать MiniDumpWriteDump, инициализируем структуру /// типа MINIDUMP_EXCEPTION_INFORMATION. /// </summary> /// <param name="pathToDirectory">Путь к директории сохранения дампа</param> /// <param name="fileName">Возвращает имя созданого файла дампа</param> public static void CreateMiniDump( String pathToDirectory, DUMP_TYPE typeOfDump, out String fileName) { using (System.Diagnostics.Process process = System.Diagnostics.Process.GetCurrentProcess()) { fileName = String.Format(@"CRASH_DUMP_{0}_{1}.dmp", DateTime.Today.ToShortDateString(), DateTime.Now.Ticks); String pathToDump = pathToDirectory + @"\" + fileName; MINIDUMP_EXCEPTION_INFORMATION Mdinfo = new MINIDUMP_EXCEPTION_INFORMATION(); Mdinfo.ThreadId = GetCurrentThreadId(); Mdinfo.ExceptionPointers = Marshal.GetExceptionPointers(); Mdinfo.ClientPointers = 1; using (FileStream fs = new FileStream(pathToDump, FileMode.Create)) { switch (typeOfDump) { case DUMP_TYPE.MiniDumpFilterMemory: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpFilterModulePaths: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpFilterTriage: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpIgnoreInaccessibleMemory: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpNormal: { MiniDumpWriteDump( process.Handle, (uint)process.Id, fs.SafeFileHandle.DangerousGetHandle(), (Int32)DUMP_TYPE.MiniDumpNormal, ref Mdinfo, IntPtr.Zero, IntPtr.Zero); break; } case DUMP_TYPE.MiniDumpScanMemory: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpValidTypeFlags: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithCodeSegs: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithDataSegs: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithFullAuxiliaryState: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithFullMemory: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithFullMemoryInfo: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithHandleData: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithIndirectlyReferencedMemory: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithModuleHeaders: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithoutAuxiliaryState: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithoutOptionalData: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithPrivateReadWriteMemory: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithPrivateWriteCopyMemory: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithProcessThreadData: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithThreadInfo: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithTokenInformation: { throw new NotImplementedException(); //break; } case DUMP_TYPE.MiniDumpWithUnloadedModules: { throw new NotImplementedException(); //break; } default: { break; } } } } }