internal async Task <Guid> Save() { UserHelperFunctions userHelper = new UserHelperFunctions() { _context = _context, _emailService = _emailService, _securityOptions = _securityOptions, _user = _user }; userHelper.Populate(); bool isNew = false; if (IsUploadDirectory == true) { var directories = _context.FolderDirectories.Where(x => x.FolderID == FolderID).ToList(); foreach (var dir in directories) { dir.IsUploadDirectory = false; _context.Update(dir); } await _context.SaveChangesAsync(); } var folderDir = _context.FolderDirectories.Where(x => x.FolderDirectoryID == FolderDirectoryID).FirstOrDefault(); if (folderDir == null) { folderDir = new FolderDirectory(); isNew = true; folderDir.FolderDirectoryID = Guid.NewGuid(); folderDir.FolderID = FolderID; } folderDir.FolderPath = FolderPath; folderDir.IsUploadDirectory = IsUploadDirectory; folderDir.RequireCredentials = RequireCredentials; folderDir.Username = Username; folderDir.Password = Password; if (isNew) { _context.Add(folderDir); } else { _context.Update(folderDir); } await _context.SaveChangesAsync(); FolderDirectoryID = folderDir.FolderDirectoryID; BackgroundJob.Enqueue <BackgroundJobHelper>(x => x.subRescanDirectories(FolderDirectoryID, null)); return(FolderDirectoryID); }
public async Task RescanDirectoriesLoadFiles(Guid?parentFolderDirectoryFileID, string path, FolderDirectory folderDir) { var physicalDirectories = Directory.GetDirectories(path); foreach (var directory in physicalDirectories) { DirectoryInfo info = new DirectoryInfo(directory); var dirFile = new FolderDirectoryFile() { FileExtention = "", FileName = info.Name, FolderDirectoryFileID = Guid.NewGuid(), FolderDirectoryID = folderDir.FolderDirectoryID, FullPath = info.FullName, CreatedDate = info.CreationTime, IsDirectory = true, ParentFolderDirectoryFileID = parentFolderDirectoryFileID }; _context.Add(dirFile); await _context.SaveChangesAsync(); await RescanDirectoriesLoadFiles(dirFile.FolderDirectoryFileID, info.FullName, folderDir); } var fileScan = Directory.GetFiles(path, "", SearchOption.TopDirectoryOnly); foreach (var file in fileScan) { FileInfo info = new FileInfo(file); var dirFile = new FolderDirectoryFile() { FileExtention = info.Extension, FileName = info.Name, FolderDirectoryFileID = Guid.NewGuid(), FolderDirectoryID = folderDir.FolderDirectoryID, FullPath = info.FullName, SizeMB = (Convert.ToDouble(info.Length) / 1024.00 / 1024.00).ToString("0.00"), CreatedDate = info.CreationTime, IsDirectory = false, ParentFolderDirectoryFileID = parentFolderDirectoryFileID }; var provider = new FileExtensionContentTypeProvider(); string contentType; if (!provider.TryGetContentType(info.FullName, out contentType)) { contentType = "application/octet-stream"; } dirFile.FileType = contentType; _context.Add(dirFile); await _context.SaveChangesAsync(); } }
/// <summary>遞迴讀取完整資料夾所有目錄(可疊加)</summary> /// <param name="tempPath">路徑字串</param> /// <param name="ParentGuid">最頂端父層對應guid</param> /// <returns>Folders[a][b] (格式string[])</returns> /// 可用以下方式疊加 /// rlt.Folders = new List<object>(); /// rlt.Folders.Add(此函數); public static FolderDirectory[] FolderRecursive(string tempPath, string ParentGuid, string FullPath) { //轉換路徑 (需判斷是絕對路徑還是相對路徑) string strPath = ""; string viewPath = ""; if (System.IO.Path.IsPathRooted(ConfigurationManager.AppSettings["FilesPath"]) == true) { //絕對路徑 strPath = ConfigurationManager.AppSettings["FilesPath"] + tempPath.Replace("/", @"\"); } else { //相對路徑 strPath = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["FilesPath"] + tempPath); } //輸出閱覽路徑 viewPath = ConfigurationManager.AppSettings["FilesViewPath"] + tempPath; List <FolderDirectory> dataList = new List <FolderDirectory>(); //判斷檔案資料夾是否存在 if (Directory.Exists(strPath)) { //目錄(含路徑)的陣列 string[] dirs = Directory.GetDirectories(strPath); //用來儲存只有目錄名的集合 ArrayList dirlist = new ArrayList(); foreach (string item in dirs) { //走訪每個元素只取得目錄名稱(不含路徑)並加入dirlist集合中 dirlist.Add(Path.GetFileNameWithoutExtension(item)); } //有資料就填入資訊 foreach (var item in dirlist) { DirectoryInfo theFolderInfo = new DirectoryInfo(strPath + item.ToString()); FolderDirectory data = new FolderDirectory(); string guid = Guid.NewGuid().ToString("N"); data.Guid = guid; //編寫對應guid data.ParentGuid = ParentGuid; //對應父層guid data.FolderPath = viewPath; //瀏覽路徑 data.FolderName = item.ToString(); //資料夾名稱 data.FolderLastWriteTime = theFolderInfo.LastWriteTime.ToString(); //最後一次存取的時間 data.FullPath = FullPath + item.ToString() + "/"; //資料夾自己的路徑 dataList.Add(data); //遞迴自己這個函數 dataList.AddRange(FolderRecursive(tempPath + "/" + item, guid, FullPath + item.ToString() + "/")); } } return(dataList.ToArray()); }