Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
FileUtility.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 using System;
4 using System.Collections.Generic;
5 using System.IO;
6 using System.Linq;
7 
8 namespace SiliconStudio.Assets
9 {
10  /// <summary>
11  /// File Utilities methods.
12  /// </summary>
13  public class FileUtility
14  {
15  /// <summary>
16  /// Determines whether the specified file is locked.
17  /// </summary>
18  /// <param name="filePath">The file path.</param>
19  /// <returns><c>true</c> if the specified file is locked; otherwise, <c>false</c>.</returns>
20  /// <exception cref="System.ArgumentNullException">filePath</exception>
21  public static bool IsFileLocked(string filePath)
22  {
23  if (filePath == null) throw new ArgumentNullException("filePath");
24  return IsFileLocked(new FileInfo(filePath));
25  }
26 
27 
28  /// <summary>
29  /// Determines whether the specified file is locked.
30  /// </summary>
31  /// <param name="file">The file.</param>
32  /// <returns><c>true</c> if the specified file is locked; otherwise, <c>false</c>.</returns>
33  public static bool IsFileLocked(FileInfo file)
34  {
35  if (file == null) throw new ArgumentNullException("file");
36  try
37  {
38  using (var stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None))
39  {
40  }
41  }
42  catch (IOException)
43  {
44  return true;
45  }
46  return false;
47  }
48 
49  /// <summary>
50  /// Gets the absolute path.
51  /// </summary>
52  /// <param name="filePath">The file path.</param>
53  /// <returns>An absolute path.</returns>
54  public static string GetAbsolutePath(string filePath)
55  {
56  return filePath == null ? null : Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, filePath));
57  }
58 
59  /// <summary>
60  /// Normalizes the file extension by adding a '.' prefix and making it lowercase.
61  /// </summary>
62  /// <param name="fileExtension">The file extension.</param>
63  /// <returns>A normalized file extension.</returns>
64  public static string NormalizeFileExtension(string fileExtension)
65  {
66  if (String.IsNullOrEmpty(fileExtension))
67  {
68  return fileExtension;
69  }
70 
71  fileExtension = fileExtension.ToLower();
72  if (fileExtension.StartsWith("."))
73  {
74  return fileExtension;
75  }
76  return String.Format(".{0}", fileExtension);
77  }
78 
79 
80  /// <summary>
81  /// Gets the file extensions normalized separated by ',' ';'.
82  /// </summary>
83  /// <param name="fileExtensions">The file extensions separated by ',' ';'.</param>
84  /// <returns>An array of file extensions.</returns>
85  public static HashSet<string> GetFileExtensionsAsSet(string fileExtensions)
86  {
87  if (fileExtensions == null) throw new ArgumentNullException("fileExtensions");
88  var fileExtensionArray = fileExtensions.Split(new[] { ',', ';' }).Select(fileExt => fileExt.Trim().ToLower()).ToList();
89  var filteredExtensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
90  foreach (var fileExtension in fileExtensionArray.Select(NormalizeFileExtension))
91  {
92  if (fileExtension == string.Empty)
93  {
94  continue;
95  }
96  filteredExtensions.Add(fileExtension);
97  }
98 
99  return filteredExtensions;
100  }
101 
102 
103  /// <summary>
104  /// Gets the file extensions normalized separated by ',' ';'.
105  /// </summary>
106  /// <param name="fileExtensions">The file extensions separated by ',' ';'.</param>
107  /// <returns>An array of file extensions.</returns>
108  public static string[] GetFileExtensions(string fileExtensions)
109  {
110  return GetFileExtensionsAsSet(fileExtensions).ToArray();
111  }
112 
113  public static IEnumerable<DirectoryInfo> EnumerateDirectories(string rootDirectory, SearchDirection direction)
114  {
115  if (rootDirectory == null) throw new ArgumentNullException("rootDirectory");
116 
117  var directory = new DirectoryInfo(rootDirectory);
118  if (Directory.Exists(rootDirectory))
119  {
120  if (direction == SearchDirection.Down)
121  {
122  yield return directory;
123  foreach (var subDirectory in directory.EnumerateDirectories("*", SearchOption.AllDirectories))
124  {
125  yield return subDirectory;
126  }
127  }
128  else
129  {
130  do
131  {
132  yield return directory;
133  directory = directory.Parent;
134  }
135  while (directory != null);
136  }
137  }
138  }
139  }
140 }
static bool IsFileLocked(FileInfo file)
Determines whether the specified file is locked.
Definition: FileUtility.cs:33
static string[] GetFileExtensions(string fileExtensions)
Gets the file extensions normalized separated by ',' ';'.
Definition: FileUtility.cs:108
SearchDirection
A direction to search for files in directories
File Utilities methods.
Definition: FileUtility.cs:13
static string NormalizeFileExtension(string fileExtension)
Normalizes the file extension by adding a '.' prefix and making it lowercase.
Definition: FileUtility.cs:64
static string GetAbsolutePath(string filePath)
Gets the absolute path.
Definition: FileUtility.cs:54
static bool IsFileLocked(string filePath)
Determines whether the specified file is locked.
Definition: FileUtility.cs:21
static HashSet< string > GetFileExtensionsAsSet(string fileExtensions)
Gets the file extensions normalized separated by ',' ';'.
Definition: FileUtility.cs:85
static IEnumerable< DirectoryInfo > EnumerateDirectories(string rootDirectory, SearchDirection direction)
Definition: FileUtility.cs:113