root / trunk / Pithos.Interfaces / FileInfoExtensions.cs @ f3d080df
History | View | Annotate | Download (5.5 kB)
1 | 27361404 | Panagiotis Kanavos | using System; |
---|---|---|---|
2 | 27361404 | Panagiotis Kanavos | using System.Collections.Generic; |
3 | 27361404 | Panagiotis Kanavos | using System.Diagnostics.Contracts; |
4 | 27361404 | Panagiotis Kanavos | using System.Linq; |
5 | 27361404 | Panagiotis Kanavos | using System.Text; |
6 | 27361404 | Panagiotis Kanavos | using System.IO; |
7 | 27361404 | Panagiotis Kanavos | using System.Text.RegularExpressions; |
8 | 27361404 | Panagiotis Kanavos | using System.Threading.Tasks; |
9 | 27361404 | Panagiotis Kanavos | |
10 | 27361404 | Panagiotis Kanavos | |
11 | 27361404 | Panagiotis Kanavos | namespace Pithos.Interfaces |
12 | 27361404 | Panagiotis Kanavos | { |
13 | 27361404 | Panagiotis Kanavos | public static class FileInfoExtensions |
14 | 27361404 | Panagiotis Kanavos | { |
15 | 4f6d51d4 | Panagiotis Kanavos | public static string AsRelativeTo(this FileSystemInfo fileInfo,string path ) |
16 | 27361404 | Panagiotis Kanavos | { |
17 | 27361404 | Panagiotis Kanavos | if (String.IsNullOrWhiteSpace(path)) |
18 | 27361404 | Panagiotis Kanavos | throw new ArgumentNullException("path"); |
19 | 27361404 | Panagiotis Kanavos | Contract.EndContractBlock(); |
20 | 5e31048f | Panagiotis Kanavos | Contract.Assume(Enum.IsDefined(typeof(StringComparison),StringComparison.InvariantCultureIgnoreCase)); |
21 | 27361404 | Panagiotis Kanavos | |
22 | 27361404 | Panagiotis Kanavos | if (!path.EndsWith("\\")) |
23 | 27361404 | Panagiotis Kanavos | path=path.ToLower() + "\\"; |
24 | 27361404 | Panagiotis Kanavos | int pathLength = path.Length; |
25 | 27361404 | Panagiotis Kanavos | |
26 | f3d080df | Panagiotis Kanavos | var filePath = fileInfo.GetProperCapitalization(); |
27 | 5e31048f | Panagiotis Kanavos | |
28 | 27361404 | Panagiotis Kanavos | if (!filePath.StartsWith(path,StringComparison.InvariantCultureIgnoreCase)) |
29 | 27361404 | Panagiotis Kanavos | throw new ArgumentException(String.Format("The path {0} doesn't contain the file {1}",path,filePath)); |
30 | 27361404 | Panagiotis Kanavos | |
31 | 27361404 | Panagiotis Kanavos | var relativePath = filePath.Substring(pathLength, filePath.Length - pathLength); |
32 | 27361404 | Panagiotis Kanavos | |
33 | 27361404 | Panagiotis Kanavos | return relativePath; |
34 | 27361404 | Panagiotis Kanavos | } |
35 | 27361404 | Panagiotis Kanavos | |
36 | 4f6d51d4 | Panagiotis Kanavos | public static string AsRelativeUrlTo(this FileSystemInfo fileInfo,string path ) |
37 | 27361404 | Panagiotis Kanavos | { |
38 | 27361404 | Panagiotis Kanavos | if (String.IsNullOrWhiteSpace(path)) |
39 | 27361404 | Panagiotis Kanavos | throw new ArgumentNullException("path"); |
40 | 27361404 | Panagiotis Kanavos | Contract.EndContractBlock(); |
41 | 27361404 | Panagiotis Kanavos | |
42 | 27361404 | Panagiotis Kanavos | var relativePath = fileInfo.AsRelativeTo(path); |
43 | 27361404 | Panagiotis Kanavos | var replacedSlashes = relativePath.Replace("\\","/"); |
44 | 27361404 | Panagiotis Kanavos | var escaped = Uri.EscapeUriString(replacedSlashes); |
45 | 27361404 | Panagiotis Kanavos | return escaped; |
46 | 27361404 | Panagiotis Kanavos | } |
47 | 27361404 | Panagiotis Kanavos | |
48 | 27361404 | Panagiotis Kanavos | public static string RelativeUriToFilePath(this Uri uri) |
49 | 27361404 | Panagiotis Kanavos | { |
50 | 27361404 | Panagiotis Kanavos | var unescaped = Uri.UnescapeDataString(uri.ToString()); |
51 | 27361404 | Panagiotis Kanavos | var path = unescaped.Replace("/", "\\"); |
52 | 27361404 | Panagiotis Kanavos | return path; |
53 | 27361404 | Panagiotis Kanavos | } |
54 | 27361404 | Panagiotis Kanavos | |
55 | 27361404 | Panagiotis Kanavos | |
56 | f3d080df | Panagiotis Kanavos | public static string GetProperDirectoryCapitalization(string fileName) |
57 | f3d080df | Panagiotis Kanavos | { |
58 | f3d080df | Panagiotis Kanavos | if (String.IsNullOrWhiteSpace(fileName)) |
59 | f3d080df | Panagiotis Kanavos | throw new ArgumentNullException("fileName"); |
60 | f3d080df | Panagiotis Kanavos | if (!Path.IsPathRooted(fileName)) |
61 | f3d080df | Panagiotis Kanavos | throw new ArgumentException("fileName must be an absolute path", "fileName"); |
62 | f3d080df | Panagiotis Kanavos | Contract.EndContractBlock(); |
63 | f3d080df | Panagiotis Kanavos | |
64 | f3d080df | Panagiotis Kanavos | var dirInfo = new DirectoryInfo(fileName); |
65 | f3d080df | Panagiotis Kanavos | return dirInfo.GetProperCapitalization(); |
66 | f3d080df | Panagiotis Kanavos | } |
67 | f3d080df | Panagiotis Kanavos | |
68 | f3d080df | Panagiotis Kanavos | public static string GetProperCapitalization(this DirectoryInfo dirInfo) |
69 | f3d080df | Panagiotis Kanavos | { |
70 | f3d080df | Panagiotis Kanavos | if (dirInfo == null) |
71 | f3d080df | Panagiotis Kanavos | throw new ArgumentNullException("dirInfo"); |
72 | f3d080df | Panagiotis Kanavos | Contract.EndContractBlock(); |
73 | f3d080df | Panagiotis Kanavos | |
74 | f3d080df | Panagiotis Kanavos | var parentDirInfo = dirInfo.Parent; |
75 | f3d080df | Panagiotis Kanavos | if (null == parentDirInfo) |
76 | f3d080df | Panagiotis Kanavos | return dirInfo.Name; |
77 | f3d080df | Panagiotis Kanavos | return Path.Combine(GetProperDirectoryCapitalization(parentDirInfo.FullName), |
78 | f3d080df | Panagiotis Kanavos | parentDirInfo.GetDirectories(dirInfo.Name)[0].Name); |
79 | f3d080df | Panagiotis Kanavos | } |
80 | f3d080df | Panagiotis Kanavos | |
81 | f3d080df | Panagiotis Kanavos | |
82 | f3d080df | Panagiotis Kanavos | public static string GetProperFilePathCapitalization(string fileName) |
83 | f3d080df | Panagiotis Kanavos | { |
84 | f3d080df | Panagiotis Kanavos | if (String.IsNullOrWhiteSpace(fileName)) |
85 | f3d080df | Panagiotis Kanavos | throw new ArgumentNullException("fileName"); |
86 | f3d080df | Panagiotis Kanavos | if (!Path.IsPathRooted(fileName)) |
87 | f3d080df | Panagiotis Kanavos | throw new ArgumentException("fileName must be an absolute path", "fileName"); |
88 | f3d080df | Panagiotis Kanavos | Contract.EndContractBlock(); |
89 | f3d080df | Panagiotis Kanavos | |
90 | f3d080df | Panagiotis Kanavos | |
91 | f3d080df | Panagiotis Kanavos | var fileInfo = new FileInfo(fileName); |
92 | f3d080df | Panagiotis Kanavos | return fileInfo.GetProperCapitalization(); |
93 | f3d080df | Panagiotis Kanavos | } |
94 | f3d080df | Panagiotis Kanavos | |
95 | f3d080df | Panagiotis Kanavos | public static string GetProperCapitalization(this FileInfo fileInfo) |
96 | f3d080df | Panagiotis Kanavos | { |
97 | f3d080df | Panagiotis Kanavos | if (fileInfo == null) |
98 | f3d080df | Panagiotis Kanavos | throw new ArgumentNullException("fileInfo"); |
99 | f3d080df | Panagiotis Kanavos | Contract.EndContractBlock(); |
100 | f3d080df | Panagiotis Kanavos | |
101 | f3d080df | Panagiotis Kanavos | |
102 | f3d080df | Panagiotis Kanavos | var dirInfo = fileInfo.Directory; |
103 | 27361404 | Panagiotis Kanavos | |
104 | f3d080df | Panagiotis Kanavos | //Directory will not be null for an absolute path |
105 | f3d080df | Panagiotis Kanavos | Contract.Assume(dirInfo != null); |
106 | f3d080df | Panagiotis Kanavos | |
107 | f3d080df | Panagiotis Kanavos | return Path.Combine(GetProperDirectoryCapitalization(dirInfo.FullName), |
108 | f3d080df | Panagiotis Kanavos | dirInfo.GetFiles(fileInfo.Name)[0].Name); |
109 | f3d080df | Panagiotis Kanavos | } |
110 | f3d080df | Panagiotis Kanavos | |
111 | f3d080df | Panagiotis Kanavos | public static string GetProperCapitalization(this FileSystemInfo info) |
112 | f3d080df | Panagiotis Kanavos | { |
113 | f3d080df | Panagiotis Kanavos | if (info is FileInfo) |
114 | f3d080df | Panagiotis Kanavos | return (info as FileInfo).GetProperCapitalization(); |
115 | f3d080df | Panagiotis Kanavos | if (info is DirectoryInfo) |
116 | f3d080df | Panagiotis Kanavos | return (info as DirectoryInfo).GetProperCapitalization(); |
117 | f3d080df | Panagiotis Kanavos | throw new NotSupportedException("Unexpected parameter type"); |
118 | f3d080df | Panagiotis Kanavos | } |
119 | f3d080df | Panagiotis Kanavos | |
120 | f3d080df | Panagiotis Kanavos | public static DirectoryInfo WithProperCapitalization(this DirectoryInfo dirInfo) |
121 | f3d080df | Panagiotis Kanavos | { |
122 | f3d080df | Panagiotis Kanavos | if (dirInfo==null) |
123 | f3d080df | Panagiotis Kanavos | throw new ArgumentNullException("dirInfo"); |
124 | f3d080df | Panagiotis Kanavos | Contract.EndContractBlock(); |
125 | f3d080df | Panagiotis Kanavos | |
126 | f3d080df | Panagiotis Kanavos | var path = dirInfo.GetProperCapitalization(); |
127 | f3d080df | Panagiotis Kanavos | return new DirectoryInfo(path); |
128 | f3d080df | Panagiotis Kanavos | } |
129 | f3d080df | Panagiotis Kanavos | |
130 | f3d080df | Panagiotis Kanavos | public static FileInfo WithProperCapitalization(this FileInfo fileInfo) |
131 | f3d080df | Panagiotis Kanavos | { |
132 | f3d080df | Panagiotis Kanavos | if (fileInfo==null) |
133 | f3d080df | Panagiotis Kanavos | throw new ArgumentNullException("fileInfo"); |
134 | f3d080df | Panagiotis Kanavos | Contract.EndContractBlock(); |
135 | f3d080df | Panagiotis Kanavos | |
136 | f3d080df | Panagiotis Kanavos | var path = fileInfo.GetProperCapitalization(); |
137 | f3d080df | Panagiotis Kanavos | return new FileInfo(path); |
138 | f3d080df | Panagiotis Kanavos | } |
139 | f3d080df | Panagiotis Kanavos | |
140 | f3d080df | Panagiotis Kanavos | public static FileSystemInfo WithProperCapitalization(this FileSystemInfo info) |
141 | f3d080df | Panagiotis Kanavos | { |
142 | f3d080df | Panagiotis Kanavos | if (info==null) |
143 | f3d080df | Panagiotis Kanavos | throw new ArgumentNullException("info"); |
144 | f3d080df | Panagiotis Kanavos | Contract.EndContractBlock(); |
145 | f3d080df | Panagiotis Kanavos | |
146 | f3d080df | Panagiotis Kanavos | if (info is FileInfo) |
147 | f3d080df | Panagiotis Kanavos | return (info as FileInfo).WithProperCapitalization(); |
148 | f3d080df | Panagiotis Kanavos | if (info is DirectoryInfo) |
149 | f3d080df | Panagiotis Kanavos | return (info as DirectoryInfo).WithProperCapitalization(); |
150 | f3d080df | Panagiotis Kanavos | |
151 | f3d080df | Panagiotis Kanavos | throw new NotSupportedException("Unexpected parameter type"); |
152 | f3d080df | Panagiotis Kanavos | } |
153 | 27361404 | Panagiotis Kanavos | } |
154 | 27361404 | Panagiotis Kanavos | } |