Advertisement
Guest User

Untitled

a guest
Apr 24th, 2015
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.54 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Web.Hosting;
  6.  
  7. namespace Helpers.Web
  8. {
  9. public class FileVirtualPathProvider : VirtualPathProvider
  10. {
  11. private bool _ensureExists = true;
  12.  
  13. public string ApplicationPath { get; set; }
  14.  
  15. internal bool EnsureExists
  16. {
  17. get
  18. {
  19. return _ensureExists;
  20. }
  21. set
  22. {
  23. _ensureExists = value;
  24. }
  25. }
  26.  
  27. public FileVirtualPathProvider(string applicationPath)
  28. {
  29. ApplicationPath = applicationPath;
  30. }
  31.  
  32. public string MapPath(string virtualPath)
  33. {
  34. string oldValue = ApplicationPath.EndsWith("/", StringComparison.OrdinalIgnoreCase) ? "~/" : "~";
  35. return virtualPath.Replace(oldValue, ApplicationPath);
  36. }
  37.  
  38. public override bool FileExists(string virtualPath)
  39. {
  40. if (EnsureExists)
  41. return File.Exists(MapPath(virtualPath));
  42. return true;
  43. }
  44.  
  45. public override bool DirectoryExists(string virtualDir)
  46. {
  47. if (EnsureExists)
  48. return Directory.Exists(MapPath(virtualDir));
  49. return true;
  50. }
  51.  
  52. public override VirtualFile GetFile(string virtualPath)
  53. {
  54. string str = MapPath(virtualPath);
  55. return new FileInfoVirtualFile(str, new FileInfo(str));
  56. }
  57.  
  58. public override VirtualDirectory GetDirectory(string virtualDir)
  59. {
  60. string str = MapPath(virtualDir);
  61. return new DirectoryInfoVirtualDirectory(str, new DirectoryInfo(str));
  62. }
  63.  
  64. internal class FileInfoVirtualFile : VirtualFile
  65. {
  66. public FileInfo File { get; set; }
  67.  
  68. public FileInfoVirtualFile(string virtualPath, FileInfo file)
  69. : base(virtualPath)
  70. {
  71. File = file;
  72. }
  73.  
  74. public override Stream Open()
  75. {
  76. return File.OpenRead();
  77. }
  78. }
  79.  
  80. internal class DirectoryInfoVirtualDirectory : VirtualDirectory
  81. {
  82. public DirectoryInfo Directory { get; set; }
  83.  
  84. public override IEnumerable Files
  85. {
  86. get
  87. {
  88. List<VirtualFile> list = new List<VirtualFile>();
  89. foreach (FileInfo file in Directory.GetFiles())
  90. list.Add(new FileInfoVirtualFile(file.FullName, file));
  91. return list;
  92. }
  93. }
  94.  
  95. public override IEnumerable Children
  96. {
  97. get
  98. {
  99. var list = new List<object>();
  100. list.AddRange((List<VirtualFile>)Files);
  101. list.AddRange((List<VirtualDirectory>)Directories);
  102. return list;
  103. }
  104. }
  105.  
  106. public override IEnumerable Directories
  107. {
  108. get
  109. {
  110. List<VirtualDirectory> list = new List<VirtualDirectory>();
  111. foreach (var dir in Directory.GetDirectories())
  112. list.Add(new DirectoryInfoVirtualDirectory(dir.FullName, dir));
  113. return list;
  114. }
  115. }
  116.  
  117. public DirectoryInfoVirtualDirectory(string virtualPath, DirectoryInfo directory)
  118. : base(virtualPath)
  119. {
  120. Directory = directory;
  121. }
  122. }
  123. }
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement