Exemplo n.º 1
0
        public TarArchiveEntry CreateEntryFromFile(string filepath, string entryName)
        {
            var file = File.OpenRead(filepath);

            var header = new TarIOFileHeader()
            {
                Filename     = entryName,
                LastModified = File.GetLastWriteTime(filepath),
                Size         = file.Length,
                Type         = LinkIndicator.File
            };

            lock (this)
            {
                baseStream.Seek(0, SeekOrigin.End);

                long written = header.Serialise(baseStream);
                long delta   = TarIOBlockManager.BLOCK_SIZE - written;
                long padding = file.Length % TarIOBlockManager.BLOCK_SIZE;

                byte[] buffer = new byte[Math.Max(delta, padding)];
                baseStream.Write(buffer, 0, (int)delta);

                file.CopyTo(baseStream);
                baseStream.Write(buffer, 0, (int)padding);

                return(new TarArchiveEntry(archive, header, null));
            }
        }
Exemplo n.º 2
0
        internal TarArchiveEntry CreateEntry(string name, Stream data)
        {
            lock (this)
            {
                TarIOEntry entry;
                this.realEntries.Add(entry = new TarIOEntry()
                {
                    Length = BLOCK_SIZE,
                    Offset = baseStream.Length + BLOCK_SIZE,
                    Entry  = new TarArchiveEntry(archive, name, this.realEntries.Count),
                });

                baseStream.Seek(0, SeekOrigin.End);
                baseStream.SetLength(baseStream.Length + BLOCK_SIZE * 2);

                var header = new TarIOFileHeader()
                {
                    Filename     = name,
                    LastModified = DateTime.Now,
                    Size         = data.Length,
                    Type         = LinkIndicator.File
                };
                header.Serialise(baseStream);

                entry.Stream = new TarIOFileItemStream(entry.Offset, entry.Length, baseStream);
                data.CopyTo(entry.Stream);

                return(entry.Entry);
            }
        }
Exemplo n.º 3
0
        public TarArchiveEntry CreateEntry(string entryName)
        {
            LinkIndicator type = LinkIndicator.File;

            if (entryName.EndsWith("\\") || entryName.EndsWith("/"))
            {
                type = LinkIndicator.Directory;
            }

            lock (this)
            {
                int  index  = this.realEntries.Count;
                long offset = this.baseStream.Length + BLOCK_SIZE;

                var header = new TarIOFileHeader()
                {
                    Type         = type,
                    Filename     = entryName,
                    LastModified = DateTime.Now,
                    Size         = 0
                };

                this.baseStream.Seek(0, SeekOrigin.End);
                long written = header.Serialise(this.baseStream);
                long delta   = BLOCK_SIZE - written;

                byte[] buffer = new byte[delta];
                this.baseStream.Write(buffer, 0, buffer.Length);
            }
        }
Exemplo n.º 4
0
        public TarArchiveEntry CreateEntry(string name)
        {
            LinkIndicator type = LinkIndicator.File;

            if (name.EndsWith("\\") || name.EndsWith("/"))
            {
                type = LinkIndicator.Directory;
            }

            var header = new TarIOFileHeader()
            {
                Filename     = name,
                LastModified = DateTime.Now,
                Size         = 0,
                Type         = type
            };

            long written = header.Serialise(BaseStream);
            long delta   = TarIOBlockManager.BLOCK_SIZE - written;

            byte[] buffer = new byte[delta];
            BaseStream.Write(buffer, 0, (int)delta);

            Position += TarIOBlockManager.BLOCK_SIZE;
            return(new TarArchiveEntry(Archive, header, null));
        }
Exemplo n.º 5
0
        public TarArchiveEntry CreateEntry(string name, Stream data)
        {
            var header = new TarIOFileHeader()
            {
                Filename     = name,
                LastModified = DateTime.Now,
                Size         = data.Length,
                Type         = LinkIndicator.File
            };

            long written = header.Serialise(BaseStream);
            long delta   = TarIOBlockManager.BLOCK_SIZE - written;
            long padding = data.Length % TarIOBlockManager.BLOCK_SIZE;

            byte[] buffer = new byte[Math.Max(delta, padding)];
            BaseStream.Write(buffer, 0, (int)delta);

            data.CopyTo(BaseStream);
            BaseStream.Write(buffer, 0, (int)padding);

            Position += TarIOBlockManager.BLOCK_SIZE + (int)padding + data.Length;
            return(new TarArchiveEntry(Archive, header, null));
        }