Fix build_init vcxproj to correctly detect changes in config.h.
[mono.git] / mcs / class / System.IO.Compression / SharpCompress / Reader / IReader.Extensions.cs
1 using System.IO;
2 using SharpCompress.Common;
3
4 namespace SharpCompress.Reader
5 {
6     internal static class IReaderExtensions
7     {
8 #if !PORTABLE && !NETFX_CORE
9         public static void WriteEntryTo(this IReader reader, string filePath)
10         {
11             using (Stream stream = File.Open(filePath, FileMode.Create, FileAccess.Write))
12             {
13                 reader.WriteEntryTo(stream);
14             }
15         }
16
17         public static void WriteEntryTo(this IReader reader, FileInfo filePath)
18         {
19             using (Stream stream = filePath.Open(FileMode.Create))
20             {
21                 reader.WriteEntryTo(stream);
22             }
23         }
24
25         /// <summary>
26         /// Extract all remaining unread entries to specific directory, retaining filename
27         /// </summary>
28         public static void WriteAllToDirectory(this IReader reader, string destinationDirectory,
29                                                ExtractOptions options = ExtractOptions.Overwrite)
30         {
31             while (reader.MoveToNextEntry())
32             {
33                 reader.WriteEntryToDirectory(destinationDirectory, options);
34             }
35         }
36
37         /// <summary>
38         /// Extract to specific directory, retaining filename
39         /// </summary>
40         public static void WriteEntryToDirectory(this IReader reader, string destinationDirectory,
41                                                  ExtractOptions options = ExtractOptions.Overwrite)
42         {
43             string destinationFileName = string.Empty;
44             string file = Path.GetFileName(reader.Entry.Key);
45
46
47             if (options.HasFlag(ExtractOptions.ExtractFullPath))
48             {
49                 string folder = Path.GetDirectoryName(reader.Entry.Key);
50                 string destdir = Path.Combine(destinationDirectory, folder);
51                 if (!Directory.Exists(destdir))
52                 {
53                     Directory.CreateDirectory(destdir);
54                 }
55                 destinationFileName = Path.Combine(destdir, file);
56             }
57             else
58             {
59                 destinationFileName = Path.Combine(destinationDirectory, file);
60             }
61
62             if (!reader.Entry.IsDirectory)
63             {
64                 reader.WriteEntryToFile(destinationFileName, options);
65             }
66             else if (options.HasFlag(ExtractOptions.ExtractFullPath) && !Directory.Exists(destinationFileName))
67             {
68                 Directory.CreateDirectory(destinationFileName);
69             }
70         }
71
72         /// <summary>
73         /// Extract to specific file
74         /// </summary>
75         public static void WriteEntryToFile(this IReader reader, string destinationFileName,
76                                             ExtractOptions options = ExtractOptions.Overwrite)
77         {
78             FileMode fm = FileMode.Create;
79
80             if (!options.HasFlag(ExtractOptions.Overwrite))
81             {
82                 fm = FileMode.CreateNew;
83             }
84             using (FileStream fs = File.Open(destinationFileName, fm))
85             {
86                 reader.WriteEntryTo(fs);
87                 //using (Stream s = reader.OpenEntryStream())
88                 //{
89                 //    s.TransferTo(fs);
90                 //}
91             }
92         }
93 #endif
94     }
95 }