in JetBrains.Profiler.SelfApi/src/DotTrace.cs [404:453]
public static string GetCollectedSnapshotFilesArchive(bool deleteUnpackedFiles)
{
lock (Mutex)
{
var indexFiles = GetCollectedSnapshotIndexFilesCore();
if (_packedInZipCount >= indexFiles.Length)
return null;
var firstIndexFile = indexFiles[_packedInZipCount];
var directory = Path.GetDirectoryName(firstIndexFile);
var name = Path.GetFileNameWithoutExtension(firstIndexFile);
var zipFilePatch = CreateUniqFileName(directory, name, "zip");
var packedIndexFiles = new List<string>();
var packedFiles = new List<string>();
using (var zipInput = File.OpenWrite(zipFilePatch))
using (var zip = new ZipArchive(zipInput, ZipArchiveMode.Create))
for (var index = _packedInZipCount; index < indexFiles.Length; index++)
{
var indexFile = indexFiles[index];
packedIndexFiles.Add(indexFile);
foreach (var file in GetSnapshotFiles(indexFile))
{
zip.CreateEntryFromFile(file, Path.GetFileName(file));
packedFiles.Add(file);
}
}
if (deleteUnpackedFiles)
{
foreach (var packedFile in packedFiles)
{
try
{
File.Delete(packedFile);
}
catch
{
// ignored
}
}
foreach (var packedIndexFile in packedIndexFiles)
_deletedIndexFiles.Add(packedIndexFile);
}
_packedInZipCount = indexFiles.Length;
return zipFilePatch;
}
}