Поиск по всему каталогу
Моя проблема заключается в следующем: как я могу распаковать файл после поиска в определенном каталоге и подпапках файлов с определенным расширением.
пожалуйста помочь
Строка 146 --> значение ошибки не может быть нулевым...
Что я уже пробовал:
1 <pre>using Microsoft.VisualBasic; 2 using Microsoft.VisualBasic.CompilerServices; 3 using System; 4 using System.Collections; 5 using System.Collections.Generic; 6 using System.ComponentModel; 7 using System.Data; 8 using System.Drawing; 9 using System.IO; 10 using System.IO.Compression; 11 using System.Linq; 12 using System.Runtime.CompilerServices; 13 using System.Text; 14 using System.Threading.Tasks; 15 using System.Windows.Forms; 16 using System.Xml; 17 18 namespace SD 19 { 20 public partial class Form1 : Form 21 { 22 public Form1() 23 { 24 InitializeComponent(); 25 } 26 private string fileName; 27 28 private void Form1_Load(object sender, EventArgs e) 29 { 30 31 } 32 33 private void button1_Click(object sender, EventArgs e) 34 { 35 List<string> filenames = FindFiles(path.Text, exten.Text,check.Checked); 36 lstFiles.Items.Clear(); 37 foreach (string filename in filenames) 38 { 39 lstFiles.Items.Add(filename); 40 } 41 } 42 private List<string> FindFiles(string dir_name, string patterns, bool search_subdirectories) 43 { 44 List<string> files = new List<string>(); 45 string[] pattern_array = patterns.Split(';'); 46 SearchOption search_option = SearchOption.AllDirectories; 47 foreach (string pattern in pattern_array) 48 { 49 foreach (string filename in Directory.GetFiles(dir_name, pattern, search_option)) 50 { 51 if (!files.Contains(filename)) files.Add(filename); 52 } 53 } 54 label1.Text = files.Count.ToString(); 55 files.Sort(); 56 return files; 57 } 58 59 private void lstFiles_SelectedIndexChanged(object sender, EventArgs e) 60 { 61 62 63 } 64 private byte[] DecompressArray(byte[] content) 65 { 66 byte[] array; 67 int num; 68 using (MemoryStream memoryStream = new MemoryStream()) 69 { 70 using (MemoryStream memoryStream1 = new MemoryStream(content)) 71 { 72 using (GZipStream gZipStream = new GZipStream(memoryStream1, CompressionMode.Decompress)) 73 { 74 byte[] numArray = new byte[1024]; 75 do 76 { 77 num = gZipStream.Read(numArray, 0, (int)numArray.Length); 78 memoryStream.Write(numArray, 0, num); 79 } 80 while (num > 0); 81 } 82 } 83 array = memoryStream.ToArray(); 84 } 85 return array; 86 } 87 private void UnzipDirectory(byte[] compressed, string outputPath) 88 { 89 IEnumerator enumerator = null; 90 IEnumerator enumerator1 = null; 91 if (!Directory.Exists(outputPath)) 92 { 93 Directory.CreateDirectory(outputPath); 94 } 95 byte[] numArray = this.DecompressArray(compressed); 96 XmlDocument xmlDocument = new XmlDocument(); 97 using (MemoryStream memoryStream = new MemoryStream(numArray)) 98 { 99 xmlDocument.Load(memoryStream); 100 XmlNode firstChild = xmlDocument.FirstChild; 101 XmlNode xmlNodes = firstChild.FirstChild; 102 XmlNode nextSibling = firstChild.FirstChild.NextSibling; 103 try 104 { 105 enumerator = xmlNodes.ChildNodes.GetEnumerator(); 106 while (enumerator.MoveNext()) 107 { 108 object objectValue = RuntimeHelpers.GetObjectValue(enumerator.Current); 109 Directory.CreateDirectory(Path.Combine(outputPath, ((XmlNode)objectValue).Attributes.Item(0).Value)); 110 } 111 } 112 finally 113 { 114 if (enumerator is IDisposable) 115 { 116 (enumerator as IDisposable).Dispose(); 117 } 118 } 119 try 120 { 121 enumerator1 = nextSibling.ChildNodes.GetEnumerator(); 122 while (enumerator1.MoveNext()) 123 { 124 object obj = RuntimeHelpers.GetObjectValue(enumerator1.Current); 125 string str = Path.Combine(outputPath, ((XmlNode)obj).Attributes.Item(0).Value); 126 byte[] numArray1 = Convert.FromBase64String(((XmlNode)obj).InnerText); 127 File.WriteAllBytes(str, numArray1); 128 } 129 } 130 finally 131 { 132 if (enumerator1 is IDisposable) 133 { 134 (enumerator1 as IDisposable).Dispose(); 135 } 136 } 137 } 138 } 139 private void lstFiles_DoubleClick(object sender, EventArgs e) 140 { 141 142 if (lstFiles.SelectedItem != null) 143 { 144 145 lstFiles.SelectedItem.ToString(); 146 FileInfo fileInfo = new FileInfo(fileName); 147 try 148 { 149 if (File.Exists(fileName)) 150 { 151 UnzipDirectory(File.ReadAllBytes(fileName), fileInfo.DirectoryName); 152 } 153 } 154 catch (Exception exception) 155 { 156 ProjectData.SetProjectError(exception); 157 Interaction.MsgBox("error", MsgBoxStyle.OkOnly, null); 158 ProjectData.ClearProjectError(); 159 return; 160 } 161 Interaction.MsgBox("Complete", MsgBoxStyle.OkOnly, null); 162 } 163 } 164 } 165 }
Patrice T
В чем проблема с вашим кодом ?
Member 11396175
проблема в том, что я не знаю, как начать процесс декомпрессии для всех файлов
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
Richard MacCutchan
В чем же проблема?