"У меня есть метод который разархивировает файл из архива нужного формата, потом удаляет из нее первые 9 символов, и еще в конце удаляет все символы до "_", потом метод ищет все "-" и "_" и заменяет иx на " ", и в конце сохраняет ее в указанной папке" - по сути все должно работать таким образом, но метод все это делает так и в конце добавляет к названию файла "1", это касается всех файлов, я не знаю как это исправить. Вот сам метод:
public static void UzipFiles(string[] zipPath, string directoryOutPath, string filterExtension, bool copyAll = false)
{
//zipPath - папка с архивами
//directoryOutPath - где будут сохронятся уже готовые файлы
//filterExtension - формат файлов которые будут разархивированы из архива
//copyAll - если true, то программа обработает все файлы нужного формата, если false, то программа обратоает первый файл нужного формата
for (int i = 0; i < zipPath.Length; i++)
{
var outDir = new DirectoryInfo(directoryOutPath);
if (!outDir.Exists)
outDir.Create();
var archFile = new FileInfo(zipPath[i]);
if (!archFile.Exists)
return;
using (var f = File.Open(archFile.FullName, FileMode.Open))
{
ZipArchive arch = new ZipArchive(f, ZipArchiveMode.Read);
int c = 1;
foreach (var entry in arch.Entries.Where(e => e.Name.ToLower().EndsWith(filterExtension.ToLower())))
{
using (Stream sr = entry.Open())
{
var ext = "";
try
{
ext = new FileInfo(entry.Name).Extension;
}
catch (Exception)
{
MessageBox.Show("Что-то пошло не так!", "Ошибка");
}
string archFileNameT = Path.GetFileNameWithoutExtension(archFile.Name).Remove(0, 9);
archFileNameT = archFileNameT.Remove(archFileNameT.LastIndexOf("_"));
char[] chars = new char[archFileNameT.Length];
for (int j = 0; j < archFileNameT.Length; j++)
{
if (archFileNameT[j] == '-')
chars[j] = ' ';
else if (archFileNameT[j] == '_')
chars[j] = ' ';
else if (archFileNameT[j] == '1')
chars[j] = ' ';
else
chars[j] = archFileNameT[j];
}
string archFileName = new string(chars);
archFileName.Trim();
string outFileName = archFileName + (copyAll ? c++.ToString() : "") + ext;
using (Stream sw = File.Create(outDir.FullName + "\\" + outFileName))
{
while (true)
{
int data = sr.ReadByte();
if (data == -1)
break;
sw.WriteByte((byte)data);
}
}
}
if (!copyAll)
break;
}
}
}
}