Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
FileSystemProvider.Windows.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 #if SILICONSTUDIO_PLATFORM_WINDOWS_DESKTOP
4 using System;
5 using System.IO;
6 using System.Linq;
7 
8 namespace SiliconStudio.Core.IO
9 {
10  /// <summary>
11  /// A file system implementation for IVirtualFileProvider.
12  /// </summary>
13  public partial class FileSystemProvider
14  {
15  public override string GetAbsolutePath(string path)
16  {
17  return ConvertUrlToFullPath(path);
18  }
19 
20  /// <inheritdoc/>
21  public override Stream OpenStream(string url, VirtualFileMode mode, VirtualFileAccess access, VirtualFileShare share = VirtualFileShare.Read, StreamFlags streamFlags = StreamFlags.None)
22  {
23  if (localBasePath != null && url.Split(VirtualFileSystem.DirectorySeparatorChar, VirtualFileSystem.AltDirectorySeparatorChar).Contains(".."))
24  throw new InvalidOperationException("Relative path is not allowed in FileSystemProvider.");
25  return new FileStream(ConvertUrlToFullPath(url), (FileMode)mode, (FileAccess)access, (FileShare)share);
26  }
27 
28  /// <inheritdoc/>
29  public override string[] ListFiles(string url, string searchPattern, VirtualSearchOption searchOption)
30  {
31  return Directory.GetFiles(ConvertUrlToFullPath(url), searchPattern, (SearchOption)searchOption).Select(ConvertFullPathToUrl).ToArray();
32  }
33 
34  /// <inheritdoc/>
35  public override void FileMove(string sourceUrl, string destinationUrl)
36  {
37  File.Move(ConvertUrlToFullPath(sourceUrl), ConvertUrlToFullPath(destinationUrl));
38  }
39 
40  /// <inheritdoc/>
41  public override void FileMove(string sourceUrl, IVirtualFileProvider destinationProvider, string destinationUrl)
42  {
43  var fsProvider = destinationProvider as FileSystemProvider;
44  if (fsProvider != null)
45  {
46  destinationProvider.CreateDirectory(destinationUrl.Substring(0, destinationUrl.LastIndexOf(VirtualFileSystem.DirectorySeparatorChar)));
47  File.Move(ConvertUrlToFullPath(sourceUrl), fsProvider.ConvertUrlToFullPath(destinationUrl));
48  }
49  else
50  {
51  using (Stream sourceStream = OpenStream(sourceUrl, VirtualFileMode.Open, VirtualFileAccess.Read),
52  destinationStream = destinationProvider.OpenStream(destinationUrl, VirtualFileMode.CreateNew, VirtualFileAccess.Write))
53  {
54  sourceStream.CopyTo(destinationStream);
55  }
56  FileDelete(sourceUrl);
57  }
58  }
59 
60  public override DateTime GetLastWriteTime(string url)
61  {
62  return File.GetLastWriteTime(ConvertUrlToFullPath(url));
63  }
64  }
65 }
66 #endif
System.IO.FileMode FileMode
Definition: ScriptSync.cs:33
VirtualFileShare
File share capabilities, equivalent of System.IO.FileShare.
VirtualFileAccess
File access equivalent of System.IO.FileAccess.
VirtualFileMode
File mode equivalent of System.IO.FileMode.
StreamFlags
Describes the different type of streams.
Definition: StreamFlags.cs:11