Statistics
| Branch: | Revision:

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
}