Ну, вы можете сделать это с:
var strings = Controls.OfType<TextBox>()
.Select(x => x.Text)
.Where(text => !string.IsNullOrEmpty(text))
.ToList();
using (ZipFile ZipIt = new ZipFile())
{
nxtFileNum++;
string comment = string.Format("This archive was created at {0:G}",
DateTime.Now);
foreach (string directory in strings)
{
ZipIt.AddDirectory(directory);
ZipIt.Comment = comment;
ZipIt.Save(Destination + "." + nxtFileNum);
}
}
Это, очевидно, вытянет все текстовые поля. Альтернатива - иметь коллекцию типа List<TextBox>
или что-то похожее вместо шести разных переменных.
Обратите внимание, что всегда создаст .1, .2, .3 и т. Д., Даже если пользователь не указал первые три имени. Дайте мне знать, если вы хотите быть абсолютно верным позиционированию, которое дал пользователь.
Мне не ясно, что вы действительно должны использовать один и тот же объект ZipFile
, кстати. Я ожидаю, что это будет более подходящим:
string comment = string.Format("This archive was created at {0:G}",
DateTime.Now);
int fileIndex = 0;
foreach (string directory in strings)
{
fileIndex++;
using (ZipFile zipFile = new ZipFile())
{
zipFile.AddDirectory(directory);
zipFile.Comment = comment;
zipFile.Save(Destination + "." + fileIndex);
}
}
(Заметьте, кстати, что я переименовал переменные в более условные, кстати, переменные обычно начинаются со строчной буквы.)