1 #Region "Microsoft.VisualBasic::c023cda9fde8ba0a2aec73a2031ada88, Microsoft.VisualBasic.Core\Extensions\IO\Directory.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Class Directory
35     
36     '         Properties: DIR
37     
38     '         Constructor: (+1 OverloadsSub New
39     
40     '         Function: CopyTo, Exists, GetFullPath, IsAbsolutePath, ToString
41     
42     '         Sub: CreateDirectory, Delete
43     
44     
45     ' /********************************************************************************/
46
47 #End Region
48
49 Imports System.Runtime.CompilerServices
50
51 Namespace FileIO
52
53     ''' <summary>
54     ''' A wrapper object for the processing of relative file path. 
55     ''' </summary>
56     Public Class Directory
57
58         Public ReadOnly Property DIR As String
59
60         ''' <summary>
61         ''' Construct a directory object from the specific Dir path value.
62         ''' </summary>
63         ''' <param name="DIR">Target directory path</param>
64         Sub New(DIR As String)
65             Me.DIR = FileSystem.GetDirectoryInfo(DIR).FullName
66         End Sub
67
68         ''' <summary>
69         ''' Gets the full path of the target file based on the path relative to this directory object.
70         ''' </summary>
71         ''' <param name="file">
72         ''' The relative path of the target file, and this parameter is also compatible with absolute file path.
73         ''' (相对路径)</param>
74         ''' <returns></returns>
75         Public Function GetFullPath(file As StringAs String
76             If Not IsAbsolutePath(file) Then
77                 file = $"{DIR}/{file}"
78             End If
79
80             file = FileSystem.GetFileInfo(file).FullName
81             Return file
82         End Function
83
84         ''' <summary>
85         ''' Determined that the input file path is a absolute path or not?
86         ''' </summary>
87         ''' <param name="file"></param>
88         ''' <returns></returns>
89         Public Shared Function IsAbsolutePath(file As StringAs Boolean
90             If InStr(file, ":\") > 0 OrElse InStr(file, ":/") > 0 Then
91                 Return True
92             ElseIf file.First = "/" AndAlso
93                 (Environment.OSVersion.Platform = PlatformID.Unix OrElse
94                 Environment.OSVersion.Platform = PlatformID.MacOSX) Then
95                 Return True
96             Else
97                 Return False
98             End If
99         End Function
100
101         ''' <summary>
102         ''' 将当前的这个文件夹之中的内容拷贝到<paramref name="target"/>目标文件夹
103         ''' </summary>
104         ''' <param name="target">The directory path of target folder.</param>
105         ''' <returns></returns>
106         Public Function CopyTo(target$, Optional progress As Progress(Of String) = NothingOptional includeSrc As Boolean = FalseAs IEnumerable(Of String)
107             Dim list As New List(Of String)
108             Dim action = Sub(path$)
109                              If Not progress Is Nothing Then
110                                  Call DirectCast(progress, IProgress(Of String)).Report(path)
111                              End If
112
113                              Call list.Add(path)
114                          End Sub
115
116             Call New CopyDirectoryAction(New Progress(Of String)(action)).Copy(DIR, target, includeSrc)
117
118             Return list
119         End Function
120
121         Public Overrides Function ToString() As String
122             Return DIR
123         End Function
124
125         <MethodImpl(MethodImplOptions.AggressiveInlining)>
126         Public Shared Function Exists(DIR As StringAs Boolean
127             Return IO.Directory.Exists(DIR)
128         End Function
129
130         ''' <summary>
131         ''' Creates a directory.
132         ''' </summary>
133         ''' <param name="junctionPoint">Name and location of the directory.</param>
134         ''' <remarks>
135         ''' Exceptions:
136         '''   T:System.ArgumentException:
137         '''     The directory name is malformed. For example, it contains illegal characters
138         '''     or is only white space.
139         '''
140         '''   T:System.ArgumentNullException:
141         '''     directory is Nothing or an empty string.
142         '''
143         '''   T:System.IO.PathTooLongException:
144         '''     The directory name is too long.
145         '''
146         '''   T:System.NotSupportedException:
147         '''     The directory name is only a colon (:).
148         '''
149         '''   T:System.IO.IOException:
150         '''     The parent directory of the directory to be created is read-only
151         '''
152         '''   T:System.UnauthorizedAccessException:
153         '''     The user does not have permission to create the directory.
154         ''' </remarks>
155         ''' 
156         <MethodImpl(MethodImplOptions.AggressiveInlining)>
157         Public Shared Sub CreateDirectory(junctionPoint As String)
158             Call FileSystem.CreateDirectory(junctionPoint)
159         End Sub
160
161         <MethodImpl(MethodImplOptions.AggressiveInlining)>
162         Public Shared Sub Delete(DIR As String)
163             Call IO.Directory.Delete(DIR)
164         End Sub
165     End Class
166 End Namespace