diff --git a/src/SharpCompress/Common/Volume.cs b/src/SharpCompress/Common/Volume.cs index ffca18c32..6ada707b9 100644 --- a/src/SharpCompress/Common/Volume.cs +++ b/src/SharpCompress/Common/Volume.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Linq; using System.Threading.Tasks; using SharpCompress.IO; using SharpCompress.Readers; @@ -42,7 +43,9 @@ internal Volume(Stream stream, ReaderOptions readerOptions, int index = 0) public virtual int Index { get; internal set; } - public string? FileName => (_baseStream as FileStream)?.Name; + public string? FileName => + (_baseStream as FileStream)?.Name + ?? (_baseStream as SourceStream)?.Files.FirstOrDefault()?.FullName; /// /// RarArchive is part of a multi-part archive. diff --git a/tests/SharpCompress.Test/ArchiveFactoryTests.cs b/tests/SharpCompress.Test/ArchiveFactoryTests.cs index ba9acd7ee..15d53cc5b 100644 --- a/tests/SharpCompress.Test/ArchiveFactoryTests.cs +++ b/tests/SharpCompress.Test/ArchiveFactoryTests.cs @@ -112,6 +112,20 @@ await Assert.ThrowsAsync(() => ); } + [Theory] + [InlineData("Zip.deflate.zip")] + [InlineData("Tar.noEmptyDirs.tar")] + [InlineData("Rar.rar")] + [InlineData("7Zip.nonsolid.7z")] + public void OpenArchive_SingleVolume_VolumeFileName_MatchesPath(string archiveName) + { + var archivePath = GetTestArchivePath(archiveName); + using var archive = ArchiveFactory.OpenArchive(archivePath); + + var volume = Assert.Single(archive.Volumes); + Assert.Equal(archivePath, volume.FileName); + } + [Theory] [InlineData("Zip.deflate.zip", ArchiveType.Zip)] [InlineData("Tar.noEmptyDirs.tar", ArchiveType.Tar)]