private void przeskoczWykaz(FileStream fileStream) { ZawartośćPliku[] wkzPlikiNames = new ZawartośćPliku[Stream_ReadUInt(fileStream)]; for (int i = 0; i < wkzPlikiNames.Length; i++) { wkzPlikiNames[i] = new ZawartośćPliku(); wkzPlikiNames[i].nazwaPliku = Stream_ReadString(fileStream); wkzPlikiNames[i].crc32 = Stream_ReadUInt(fileStream); wkzPlikiNames[i].itag = Stream_ReadUInt(fileStream); } string[] wkzTeczkiNames = new string[Stream_ReadUInt(fileStream)]; for (int i = 0; i < wkzTeczkiNames.Length; i++) { wkzTeczkiNames[i] = Stream_ReadString(fileStream); przeskoczWykaz(fileStream); } }
private void wyjaśnijTeczkę(FileStream fileStream, string filePath, uint poziom) { List <ZawartośćPliku> plikiNames = new List <ZawartośćPliku>(); List <string> teczkiNames = new List <string>(); { //wgraj pliki z teczkami ze ścieżki WIN32_FIND_DATA findData; IntPtr hFile = FindFirstFileEx(filePath + "*", FINDEX_INFO_LEVELS.FindExInfoBasic, out findData, FINDEX_SEARCH_OPS.FindExSearchNameMatch, IntPtr.Zero, 0); if (hFile.ToInt32() != -1) { do { if ((findData.dwFileAttributes & 0x10) != 0x10) { plikiNames.Add(new ZawartośćPliku() { nazwaPliku = findData.cFileName }); } else if (findData.cFileName != "." && findData.cFileName != "..") { teczkiNames.Add(findData.cFileName); } }while (FindNextFile(hFile, out findData)); FindClose(hFile); } } { //wgraj crc32 oraz itag ze ścieżki for (int i = 0; i < plikiNames.Count; i++) { Crc32 crc32 = new Crc32(); try { byte[] allFileBytes = File.ReadAllBytes(filePath + plikiNames[i].nazwaPliku); plikiNames[i].crc32 = crc32.Append(0, allFileBytes, 0, allFileBytes.Length); plikiNames[i].itag = Program.liczItag(allFileBytes); } catch (Exception ex) { plikiNames[i].crc32 = 0; plikiNames[i].itag = 0; } } } ZawartośćPliku[] wkzPlikiNames = new ZawartośćPliku[Stream_ReadUInt(fileStream)]; { //wgraj pliki z wykazu for (int i = 0; i < wkzPlikiNames.Length; i++) { wkzPlikiNames[i] = new ZawartośćPliku(); wkzPlikiNames[i].nazwaPliku = Stream_ReadString(fileStream); wkzPlikiNames[i].crc32 = Stream_ReadUInt(fileStream); wkzPlikiNames[i].itag = Stream_ReadUInt(fileStream); } } { //postanów o zmienionych, usuniętych, wtórnych plikach for (int i = 0; i < wkzPlikiNames.Length; i++) { bool isWykazInPliki = false; for (int j = 0; j < plikiNames.Count; j++) { if (plikiNames[j].nazwaPliku == wkzPlikiNames[i].nazwaPliku && (plikiNames[j].crc32 != wkzPlikiNames[i].crc32 || plikiNames[j].itag != wkzPlikiNames[i].itag)) { piszPlikZmieniony(poziom, wkzPlikiNames[i].nazwaPliku); isWykazInPliki = true; break; } else if (plikiNames[j].nazwaPliku == wkzPlikiNames[i].nazwaPliku) { isWykazInPliki = true; break; } } if (!isWykazInPliki) { piszPlikUsunięty(poziom, wkzPlikiNames[i].nazwaPliku); } } foreach (ZawartośćPliku plikName in plikiNames) { bool isPlikInWykaz = false; for (int i = 0; i < wkzPlikiNames.Length; i++) { if (plikName.nazwaPliku == wkzPlikiNames[i].nazwaPliku) { isPlikInWykaz = true; break; } } if (!isPlikInWykaz) { piszPlikWtórny(poziom, plikName.nazwaPliku); } } } string[] wkzTeczkiNames = new string[Stream_ReadUInt(fileStream)]; { //przetwórz teczki wykazu for (int i = 0; i < wkzTeczkiNames.Length; i++) { wkzTeczkiNames[i] = Stream_ReadString(fileStream); bool isWykazInTeczkiNames = false; for (int j = 0; j < teczkiNames.Count; j++) { if (teczkiNames[j] == wkzTeczkiNames[i]) { isWykazInTeczkiNames = true; break; } } if (!isWykazInTeczkiNames) { piszTeczkaUsunięta(poziom, wkzTeczkiNames[i]); przeskoczWykaz(fileStream); } else { textBox1.Text = filePath + wkzTeczkiNames[i]; textBox1.Refresh(); Application.DoEvents(); {//powiadom xml o zmiannie teczki piszPlikZmieniony(poziom, "<" + wkzTeczkiNames[i] + ">"); piszPlikUsunięty(poziom, "<" + wkzTeczkiNames[i] + ">"); piszPlikWtórny(poziom, "<" + wkzTeczkiNames[i] + ">"); piszTeczkaUsunięta(poziom, "<" + wkzTeczkiNames[i] + ">"); piszTeczkaWtórna(poziom, "<" + wkzTeczkiNames[i] + ">"); } wyjaśnijTeczkę(fileStream, filePath + wkzTeczkiNames[i] + "\\", poziom + 1); {//powiadom xml o powrocie piszPlikZmieniony(poziom, "</>"); piszPlikUsunięty(poziom, "</>"); piszPlikWtórny(poziom, "</>"); piszTeczkaUsunięta(poziom, "</>"); piszTeczkaWtórna(poziom, "</>"); } } } } { //wypisz wtórne teczki foreach (string teczkiName in teczkiNames) { bool isTeczkiNameInWykaz = false; for (int i = 0; i < wkzTeczkiNames.Length; i++) { if (teczkiName == wkzTeczkiNames[i]) { isTeczkiNameInWykaz = true; break; } } if (!isTeczkiNameInWykaz) { piszTeczkaWtórna(poziom, teczkiName); } } } }