示例#1
0
        private static async Task CreateEntryFromFileInfoAsync(this TarWriter writer, FileInfo fi, string entryName, CancellationToken cancellationToken)
        {
            var entry = new TarEntry
            {
                Name         = entryName.Replace('\\', '/').TrimEnd('/'),
                AccessTime   = fi.LastAccessTimeUtc,
                ModifiedTime = fi.LastWriteTimeUtc,
                Type         = TarEntryType.File,
                Mode         = Convert.ToInt32("644", 8),
            };

            if (fi.Attributes.HasFlag(FileAttributes.Directory))
            {
                entry.Type  = TarEntryType.Directory;
                entry.Mode  = Convert.ToInt32("755", 8);
                entry.Name += "/";
            }
            else
            {
                entry.Length = fi.Length;
            }

            if (fi.Attributes.HasFlag(FileAttributes.ReadOnly))
            {
                entry.Mode &= ~Convert.ToInt32("222", 8);
            }

            await writer.CreateEntryAsync(entry);

            if (!fi.Attributes.HasFlag(FileAttributes.Directory))
            {
                using (var file = fi.OpenRead())
                {
                    const int bufferSize = 81920; // This is the documented default for CopyToAsync().
                    await file.CopyToAsync(writer.CurrentFile, bufferSize, cancellationToken);
                }
            }
        }
示例#2
0
        private static async Task CreateEntryFromFileInfoAsync(this TarWriter writer, FileInfo fi, string entryName)
        {
            var entry = new TarEntry
            {
                Name         = entryName.Replace('\\', '/').TrimEnd('/'),
                AccessTime   = fi.LastAccessTimeUtc,
                ModifiedTime = fi.LastWriteTimeUtc,
                Type         = TarEntryType.File,
                Mode         = Convert.ToInt32("644", 8),
            };

            if (fi.Attributes.HasFlag(FileAttributes.Directory))
            {
                entry.Type  = TarEntryType.Directory;
                entry.Mode  = Convert.ToInt32("755", 8);
                entry.Name += "/";
            }
            else
            {
                entry.Length = fi.Length;
            }

            if (fi.Attributes.HasFlag(FileAttributes.ReadOnly))
            {
                entry.Mode &= ~Convert.ToInt32("222", 8);
            }

            await writer.CreateEntryAsync(entry);

            if (!fi.Attributes.HasFlag(FileAttributes.Directory))
            {
                using (var file = fi.OpenRead())
                {
                    await file.CopyToAsync(writer.CurrentFile);
                }
            }
        }