protected override IVirtualFile AddFileToBackingDirectoryOrDefault(string fileName, byte[] contents)
        {
            if (Files.Any(f => f.Name == fileName))
            {
                throw new ArgumentException("A file with the same name already exists.");
            }

            var newFile = new InMemoryVirtualFile(VirtualPathProvider, this)
            {
                FilePath     = VirtualPathProvider.CombineVirtualPath(this.VirtualPath, fileName),
                FileName     = fileName,
                ByteContents = contents
            };

            this.files.Add(newFile);
            return(newFile);
        }
        protected override Stream AddFileToBackingDirectoryOrDefault(string fileName)
        {
            if (Files.Any(f => f.Name == fileName))
            {
                throw new ArgumentException("A file with the same name already exists.");
            }

            var newFile = new InMemoryVirtualFile(VirtualPathProvider, this)
            {
                FilePath = VirtualPathProvider.CombineVirtualPath(this.VirtualPath, fileName),
                FileName = fileName,
                ByteContents = new byte[0],
            };
            var stream = new InMemoryStream((contents) => newFile.ByteContents = contents);

            this.files.Add(newFile);

            return stream;
        }