-
Notifications
You must be signed in to change notification settings - Fork 375
/
FileSystemDirectoryAccessor.cs
95 lines (75 loc) · 3.13 KB
/
FileSystemDirectoryAccessor.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Microsoft.DotNet.Interactive.Utility;
namespace Microsoft.DotNet.Interactive.CSharpProject;
public class FileSystemDirectoryAccessor : IDirectoryAccessor
{
private readonly DirectoryInfo _rootDirectory;
public FileSystemDirectoryAccessor(DirectoryInfo rootDir)
{
_rootDirectory = rootDir ?? throw new ArgumentNullException(nameof(rootDir));
}
public bool DirectoryExists(RelativeDirectoryPath path)
{
return GetFullyQualifiedPath(path).Exists;
}
public bool FileExists(RelativeFilePath filePath)
{
return GetFullyQualifiedPath(filePath).Exists;
}
public void EnsureDirectoryExists(RelativeDirectoryPath path)
{
var fullyQualifiedPath = GetFullyQualifiedPath(path);
if (!Directory.Exists(fullyQualifiedPath.FullName))
{
Directory.CreateDirectory(fullyQualifiedPath.FullName);
}
}
public string ReadAllText(RelativeFilePath filePath)
{
return File.ReadAllText(GetFullyQualifiedPath(filePath).FullName);
}
public void WriteAllText(RelativeFilePath path, string text)
{
File.WriteAllText(GetFullyQualifiedPath(path).FullName, text);
}
public FileSystemInfo GetFullyQualifiedPath(RelativePath path)
{
if (path == null)
{
throw new ArgumentNullException(nameof(path));
}
return path.Match<FileSystemInfo>(
directory => new DirectoryInfo(_rootDirectory.Combine(directory).FullName),
file => new FileInfo(_rootDirectory.Combine(file).FullName)
);
}
public IDirectoryAccessor GetDirectoryAccessorForRelativePath(RelativeDirectoryPath relativePath)
{
var absolutePath = _rootDirectory.Combine(relativePath).FullName;
return new FileSystemDirectoryAccessor(new DirectoryInfo(absolutePath));
}
public IEnumerable<RelativeDirectoryPath> GetAllDirectoriesRecursively()
{
var directories = _rootDirectory.GetDirectories("*", SearchOption.AllDirectories);
return directories.Select(f =>
new RelativeDirectoryPath(PathUtilities.GetRelativePath(_rootDirectory.FullName, f.FullName)));
}
public IEnumerable<RelativeFilePath> GetAllFilesRecursively()
{
var files = _rootDirectory.GetFiles("*", SearchOption.AllDirectories);
return files.Select(f =>
new RelativeFilePath(PathUtilities.GetRelativePath(_rootDirectory.FullName, f.FullName)));
}
public IEnumerable<RelativeFilePath> GetAllFiles()
{
var files = _rootDirectory.GetFiles("*", SearchOption.TopDirectoryOnly);
return files.Select(f =>
new RelativeFilePath(PathUtilities.GetRelativePath(_rootDirectory.FullName, f.FullName)));
}
public override string ToString() => _rootDirectory.FullName;
}