root / trunk / Pithos.Interfaces / FileInfoExtensions.cs @ 5e31048f
History | View | Annotate | Download (1.9 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 | 27361404 | Panagiotis Kanavos | public static string AsRelativeTo(this FileInfo 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 | 27361404 | Panagiotis Kanavos | var filePath = fileInfo.FullName; |
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 | 27361404 | Panagiotis Kanavos | public static string AsRelativeUrlTo(this FileInfo 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 | 27361404 | Panagiotis Kanavos | |
57 | 27361404 | Panagiotis Kanavos | } |
58 | 27361404 | Panagiotis Kanavos | } |