как передать значения после каждой итерации цикла в отдельную переменную или в массив для последующего использования/ использования в цикле?
public static void Run()
{
public static string desktop = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);
using (var result = new MemoryStream())
{
using (var archive = new ZipArchive(result, ZipArchiveMode.Create, true))
{
foreach (string p in found) // List<string> found
{
var pr = archive.CreateEntry("Found_" + p + ".txt");
using (var entryStream = pr.Open())
{
entryStream.Write(memone, 0, memory.Length) // byte[] memone
}
}
}
File.WriteAllBytes(@"found.zip", result.ToArray());
}
foreach (string path in Paths.sWPaths)
{
List<string> my = new List<string> { "qw", "er", "ty", "ui", "op", "as", "df", "gh", };
List<string> found = Directory.EnumerateDirectories(desktop + "//")
.Select(d => new DirectoryInfo(path).Name).Where(n => my.Contains(n)).ToList();
List<file> Informone = Data.Get(desktop + path);
byte[] memone = cUtils.WriteOne(Informone).ToArray();
}
}
как передать значения после каждой итерации цикла в отдельную переменную или в массив для последующего использования/использования в цикле? (Сразу предупреждаю вас, мне нужно выводить не конечное значение цикла, а значения каждой итерации)
Нужно передавать значения "List< string > found" после каждой итерации в массив или в переменную
foreach (string path in Paths.sWPaths)
{
List<string> my = new List<string> { "qw", "er", "ty", "ui", "op", "as", "df", "gh", };
List<string> found = Directory.EnumerateDirectories(desktop + "//")
Select(d => new DirectoryInfo(path).Name).Where(n => my.Contains(n)).ToList();
}
для использования в другом цикле
foreach (string p in found) // List<string> found //для использования здесь
{
var pr = archive.CreateEntry("Found_" + p + ".txt");
}
Нужно передавать значения "byte[] memone" после каждой итерации
foreach (string path in Paths.sWPaths)
{
List<file> Informone = Data.Get(desktop + path);
byte[] memone = cUtils.WriteOne(Informone).ToArray());
}
чтобы использовать здесь
using (var entryStream = pr.Open())
{
entryStream.Write(memone, 0, memory.Length) // byte[] memone
}
удалось через IEnumerable(благодаря CrazyElf) передать List found, но при передаче байтов происходит какая-то хрень, после каждой итерации данные в байтах разные, но я то ли передаю их криво, то ли криво записываю в архив. название текстового файла берется с List found, а данные в текстовых файлах с byte[] memone. так вот в чем проблема при передаче байтов если в архиве окажется больше одного текстового файла - то во все текстовые файлы запишется одно и то же, а так быть не должно
как должно быть: первая итерация цикла (foreach (string path in Paths.sWPaths)) - передача List и byte[] -> запись в архив, вторая итерация этого же цикла - передача List и byte[] -> запись в архив, и так далее, совпадений не должно быть, потому что List и byte[] после каждой итерации разныe
Ответы (1 шт):
Что-то такое должно быть, если я правильно понял:
MemoryStream SomeFunc()
{
foreach (string path in Paths.sWPaths)
{
List<file> Informone = Data.Get(desktop + path);
MemoryStream memoryone = new MemoryStream(cUtils.WriteOne(Informone).ToArray()); //MemoryStream memoryone
yield return memoryone;
}
}
...
using (var entryStream = pr.Open())
{
foreach(var memoryone in SomeFunc())
{
memoryone.CopyTo(entryStream); // MemoryStream memoryone //для использования здесь
}
}
Но чтобы это всё одновременно работало, нужно будет использовать многопоточность или асинхронность.