Beispiel #1
0
        public static FileExplorerResponse GetDetails(string path, string[] names)
        {
            FileExplorerResponse DetailsResponse = new FileExplorerResponse();

            try
            {
                FileDetails[] fDetails = new FileDetails[names.Length];
                for (int i = 0; i < names.Length; i++)
                {
                    var absolutePath = ToAbsolute(path);
                    absolutePath = CombinePaths(absolutePath, names[i]);
                    var         physicalPath = ToPhysicalPath(absolutePath);
                    FileInfo    info         = new FileInfo(physicalPath);
                    FileDetails fileDetails  = new FileDetails();
                    fileDetails.Name     = info.Name;
                    fileDetails.Type     = (info.Extension == "") ? "File Folder" : info.Extension; // Has period
                    fileDetails.Location = info.FullName;
                    fileDetails.Size     = (info.Extension != "") ? info.Length : new DirectoryInfo(physicalPath).EnumerateFiles("*", SearchOption.AllDirectories).Sum(file => file.Length);;
                    fileDetails.Created  = info.CreationTime.ToString();
                    fileDetails.Modified = info.LastWriteTime.ToString();
                    fDetails[i]          = fileDetails;
                }
                DetailsResponse.details = fDetails;
                return(DetailsResponse);
            }
            catch (Exception e)
            {
                DetailsResponse.error = e.GetType().FullName + ", " + e.Message;
                return(DetailsResponse);
            }
        }
Beispiel #2
0
        public FileExplorerResponse Remove(string[] names, string path)
        {
            FileExplorerResponse DeleteResponse = new FileExplorerResponse();

            try
            {
                string physicalPath = GetPath(path);
                List <FileAccessRules> FilesPermission = new List <FileAccessRules>();
                for (int i = 0; i < names.Length; i++)
                {
                    FileAccessRules permission = GetFilePermission(physicalPath, names[i], IsFile(CombineRelativePath(path, names[i])));
                    if (!permission.Read || !permission.Edit)
                    {
                        throw new ArgumentException("'" + path + names[i] + "' is not accessible. Access is denied.");
                    }
                    FilesPermission.Add(permission);
                }
                DeleteResponse = FileExplorerOperations.Remove(names, path);
                var items = DeleteResponse.files.ToArray();
                for (int i = 0; i < items.Length; i++)
                {
                    items[i].permission = FilesPermission[i];
                }
                DeleteResponse.files = items;
                return(DeleteResponse);
            }
            catch (Exception e)
            {
                DeleteResponse.error = e.GetType().FullName + ", " + e.Message;
                return(DeleteResponse);
            }
        }
Beispiel #3
0
        public FileExplorerResponse ReadData(string path, string filter)
        {
            FileExplorerResponse ReadResponse = new FileExplorerResponse();

            try
            {
                ReadResponse = FileExplorerOperations.ReadData(path, filter);
                string physicalPath = GetPath(path);
                ReadResponse.cwd.permission = GetPathPermission(path);
                if (!ReadResponse.cwd.permission.Read)
                {
                    DirectoryContent[] fileDetails = new DirectoryContent[0];
                    ReadResponse.files = fileDetails;
                    return(ReadResponse);
                }
                var items = ReadResponse.files.ToArray();
                for (int i = 0; i < items.Length; i++)
                {
                    items[i].permission = GetFilePermission(physicalPath, items[i].name, items[i].isFile);
                    if (items[i].isFile)
                    {
                        items[i].permission.EditContents = ReadResponse.cwd.permission.EditContents;
                        items[i].permission.Upload       = ReadResponse.cwd.permission.Upload;
                    }
                }
                ReadResponse.files = items;
                return(ReadResponse);
            }
            catch (Exception e)
            {
                ReadResponse.error = e.GetType().FullName + ", " + e.Message;
                return(ReadResponse);
            }
        }
Beispiel #4
0
        public FileExplorerResponse Paste(string sourceDir, string backupDir, string[] names, string option, IEnumerable <CommonFileDetails> commonFiles)
        {
            FileExplorerResponse PasteResponse = new FileExplorerResponse();

            try
            {
                string phyPath = GetPath(sourceDir);
                for (int i = 0; i < names.Length; i++)
                {
                    FileAccessRules FilePermission = GetFilePermission(phyPath, names[i], IsFile(CombineRelativePath(sourceDir, names[i])));
                    if (!FilePermission.Read || !FilePermission.Copy)
                    {
                        throw new ArgumentException("'" + sourceDir + names[i] + "' is not accessible. Access is denied.");
                    }
                }
                FileAccessRules PathPermission = GetPathPermission(backupDir);
                if (!PathPermission.Read || !PathPermission.EditContents)
                {
                    throw new ArgumentException("'" + backupDir + "' is not accessible. Access is denied.");
                }
                PasteResponse       = FileExplorerOperations.Paste(sourceDir, backupDir, names, option, commonFiles);
                PasteResponse.files = SetPermission(backupDir, PasteResponse.files);
                return(PasteResponse);
            }
            catch (Exception e)
            {
                PasteResponse.error = e.GetType().FullName + ", " + e.Message;
                return(PasteResponse);
            }
        }
Beispiel #5
0
        public static FileExplorerResponse Rename(string path, string oldname, string newname, IEnumerable <CommonFileDetails> commonFiles)
        {
            FileExplorerResponse RenameResponse = new FileExplorerResponse();

            try
            {
                if (commonFiles != null)
                {
                    foreach (var file in commonFiles)
                    {
                        file.Path = ToPhysicalPath(ToAbsolute(file.Path));
                    }
                }
                string oldpath = "", newpath = "", temppath = "", tempname = "Syncfusion_TempFolder";
                path = ToAbsolute(path);
                if (!string.IsNullOrEmpty(oldname) && !string.IsNullOrEmpty(newname))
                {
                    oldpath  = ToPhysicalPath(CombinePaths(path, oldname));
                    newpath  = ToPhysicalPath(CombinePaths(path, newname));
                    temppath = ToPhysicalPath(CombinePaths(path, tempname));
                    FileInfo info   = new FileInfo(oldpath);
                    var      isFile = (info.Extension != "") ? true : false;
                    if (isFile)
                    {
                        info.MoveTo(newpath);
                    }
                    else
                    {
                        if (oldname.Equals(newname, StringComparison.OrdinalIgnoreCase))
                        {
                            MoveDirectory(oldpath, temppath, commonFiles, true);
                            MoveDirectory(temppath, newpath, commonFiles, true);
                        }
                        else
                        {
                            MoveDirectory(oldpath, newpath, commonFiles, true);
                        }
                    }
                    var addedData = new[] {
                        GetFileDetails(newpath)
                    };
                    RenameResponse.files = addedData;
                    return(RenameResponse);
                }
                else
                {
                    throw new ArgumentNullException("name should not be null");
                }
            }
            catch (Exception e)
            {
                RenameResponse.error = e.GetType().FullName + ", " + e.Message;
                return(RenameResponse);
            }
        }
Beispiel #6
0
        public object doJSONPAction(string callback, string json)
        {
            object             Data       = null;
            var                serializer = new JavaScriptSerializer();
            FileExplorerParams args       = (FileExplorerParams)serializer.Deserialize(json, typeof(FileExplorerParams));

            try
            {
                if (args.ActionType != "Paste" && args.ActionType != "GetDetails")
                {
                    string FilePath = FileExplorerOperations.ToPhysicalPath(FileExplorerOperations.ToAbsolute(args.Path));
                }
                FileOperationController Rule      = new FileOperationController();
                FileAccessOperations    operation = new FileAccessOperations(Rule.GetRules());
                switch (args.ActionType)
                {
                case "Read":
                    Data = operation.ReadData(args.Path, args.ExtensionsAllow);
                    break;

                case "Search":
                    Data = operation.Search(args.Path, args.ExtensionsAllow, args.SearchString, args.CaseSensitive);
                    break;

                case "CreateFolder":
                    Data = operation.NewFolder(args.Path, args.Name);
                    break;

                case "Paste":
                    Data = operation.Paste(args.LocationFrom, args.LocationTo, args.Names, args.Action, args.CommonFiles);
                    break;

                case "Remove":
                    Data = operation.Remove(args.Names, args.Path);
                    break;

                case "Rename":
                    Data = operation.Rename(args.Path, args.Name, args.NewName, args.CommonFiles);
                    break;

                case "GetDetails":
                    Data = operation.GetDetails(args.Path, args.Names);
                    break;
                }
                HttpContext.Current.Response.Write(string.Format("{0}({1});", callback, serializer.Serialize(Data)));
                return("");
            }
            catch (Exception e)
            {
                FileExplorerResponse Response = new FileExplorerResponse();
                Response.error = e.GetType().FullName + ", " + e.Message;
                HttpContext.Current.Response.Write(string.Format("{0}({1});", callback, serializer.Serialize(Response)));
                return("");
            }
        }
Beispiel #7
0
        public object doJSONAction()
        {
            FileExplorerParams args = FileExplorerOperations.GetAjaxData(Request);

            if (args.ActionType == "Upload")
            {
                FileExplorerOperations.Upload(args.Files, args.Path);
                return(new HttpResponseMessage()
                {
                    Content = new StringContent("ok", Encoding.UTF8, "text/plain")
                });
            }
            try
            {
                if (args.ActionType != "Paste" && args.ActionType != "GetDetails")
                {
                    var FilePath = FileExplorerOperations.ToPhysicalPath(FileExplorerOperations.ToAbsolute(args.Path));
                }
                FileOperationController Rule      = new FileOperationController();
                FileAccessOperations    operation = new FileAccessOperations(Rule.GetRules());
                switch (args.ActionType)
                {
                case "Read":
                    return(operation.ReadData(args.Path, args.ExtensionsAllow));

                case "Search":
                    return(operation.Search(args.Path, args.ExtensionsAllow, args.SearchString, args.CaseSensitive));

                case "CreateFolder":
                    return(operation.NewFolder(args.Path, args.Name));

                case "Paste":
                    return(operation.Paste(args.LocationFrom, args.LocationTo, args.Names, args.Action, args.CommonFiles));

                case "Remove":
                    return(operation.Remove(args.Names, args.Path));

                case "Rename":
                    return(operation.Rename(args.Path, args.Name, args.NewName, args.CommonFiles));

                case "GetDetails":
                    return(operation.GetDetails(args.Path, args.Names));
                }
                return("");
            }
            catch (Exception e) {
                FileExplorerResponse Response = new FileExplorerResponse();
                Response.error = e.GetType().FullName + ", " + e.Message;
                return(Response);
            }
        }
Beispiel #8
0
        public static FileExplorerResponse ReadData(string path, string filter)
        {
            FileExplorerResponse ReadResponse = new FileExplorerResponse();

            try
            {
                var directory        = new DirectoryInfo(ToPhysicalPath(ToAbsolute(path)));
                DirectoryContent cwd = new DirectoryContent();
                cwd.name         = directory.Name;
                cwd.size         = 0;
                cwd.type         = "Directory";
                cwd.isFile       = false;
                cwd.dateModified = directory.LastWriteTime.ToString();
                cwd.hasChild     = directory.GetDirectories().Length > 0 ? true : false;
                ReadResponse.cwd = cwd;
                filter           = filter.Replace(" ", "");
                var extensions = (filter ?? "*").Split(",|;".ToCharArray(), System.StringSplitOptions.RemoveEmptyEntries);
                var files      = extensions.SelectMany(directory.GetFiles)
                                 .Select(file => new DirectoryContent
                {
                    name         = file.Name,
                    isFile       = true,
                    size         = file.Length,
                    type         = "File",
                    dateModified = file.LastWriteTime.ToString(),
                    hasChild     = false
                });

                var directories = directory.GetDirectories().Select(subDirectory => new DirectoryContent
                {
                    name         = subDirectory.Name,
                    size         = 0,
                    type         = "Directory",
                    isFile       = false,
                    dateModified = subDirectory.LastWriteTime.ToString(),
                    hasChild     = subDirectory.GetDirectories().Length > 0 ? true : false
                });
                object fileDetails = files.Concat(directories);
                ReadResponse.files = (IEnumerable <DirectoryContent>)fileDetails;
                return(ReadResponse);
            }
            catch (Exception e) {
                ReadResponse.error = e.GetType().FullName + ", " + e.Message;
                return(ReadResponse);
            }
        }
Beispiel #9
0
        public static FileExplorerResponse Search(string path, string filter, string searchString, bool caseSensitive)
        {
            FileExplorerResponse ReadResponse = new FileExplorerResponse();

            try
            {
                var directory = new DirectoryInfo(ToPhysicalPath(ToAbsolute(path)));
                filter = filter.Replace(" ", "");
                var filterItems  = directory.GetFiles(searchString, SearchOption.AllDirectories);
                var extensions   = (filter ?? "*").Split(",|;".ToCharArray(), System.StringSplitOptions.RemoveEmptyEntries);
                var filteredList = directory.GetFiles(searchString, SearchOption.AllDirectories)
                                   .Select(file => new DirectoryContent
                {
                    name         = file.Name,
                    isFile       = true,
                    size         = file.Length,
                    type         = "File",
                    dateModified = file.LastWriteTime.ToString(),
                    hasChild     = false,
                    filterPath   = file.FullName.Replace(directory.FullName, "").Replace(file.Name, "")
                }).
                                   Where(item => new Regex(WildcardToRegex(searchString), (caseSensitive ? RegexOptions.None : RegexOptions.IgnoreCase)).IsMatch(item.name));

                var files = extensions.SelectMany(extention => filteredList.Where(a =>
                                                                                  new Regex(WildcardToRegex(extention), (caseSensitive ? RegexOptions.None : RegexOptions.IgnoreCase)).IsMatch(a.name)));
                files = files.Where(item => new Regex(WildcardToRegex(searchString), (caseSensitive ? RegexOptions.None : RegexOptions.IgnoreCase)).IsMatch(item.name));
                var directories = directory.GetDirectories(searchString, SearchOption.AllDirectories).Select(subDirectory => new DirectoryContent
                {
                    name         = subDirectory.Name,
                    size         = 0,
                    type         = "Directory",
                    isFile       = false,
                    dateModified = subDirectory.LastWriteTime.ToString(),
                    hasChild     = subDirectory.GetDirectories().Length > 0 ? true : false,
                    filterPath   = subDirectory.FullName.Replace(directory.FullName, "").Replace(subDirectory.Name, "")
                }).
                                  Where(item => new Regex(WildcardToRegex(searchString), (caseSensitive ? RegexOptions.None : RegexOptions.IgnoreCase)).IsMatch(item.name));
                object fileDetails = files.Concat(directories);
                ReadResponse.files = (IEnumerable <DirectoryContent>)fileDetails;
                return(ReadResponse);
            }
            catch (Exception e) {
                ReadResponse.error = e.GetType().FullName + ", " + e.Message;
                return(ReadResponse);
            }
        }
Beispiel #10
0
        public FileExplorerResponse NewFolder(string path, string name)
        {
            FileExplorerResponse CreateResponse = new FileExplorerResponse();

            try
            {
                FileAccessRules PathPermission = GetPathPermission(path);
                if (!PathPermission.Read || !PathPermission.EditContents)
                {
                    throw new ArgumentException("'" + path + "' is not accessible. Access is denied.");
                }
                CreateResponse       = FileExplorerOperations.NewFolder(path, name);
                CreateResponse.files = SetPermission(path, CreateResponse.files);
                return(CreateResponse);
            }
            catch (Exception e)
            {
                CreateResponse.error = e.GetType().FullName + ", " + e.Message;
                return(CreateResponse);
            }
        }
Beispiel #11
0
        public FileExplorerResponse Rename(string path, string oldName, string newName, IEnumerable <CommonFileDetails> commonFiles)
        {
            FileExplorerResponse RenameResponse = new FileExplorerResponse();

            try
            {
                FileAccessRules FilePermission = GetFilePermission(GetPath(path), oldName, IsFile(CombineRelativePath(path, oldName)));
                if (!FilePermission.Read || !FilePermission.Edit)
                {
                    throw new ArgumentException("'" + path + oldName + "' is not accessible. Access is denied.");
                }
                RenameResponse       = FileExplorerOperations.Rename(path, oldName, newName, commonFiles);
                RenameResponse.files = SetPermission(path, RenameResponse.files);
                return(RenameResponse);
            }
            catch (Exception e)
            {
                RenameResponse.error = e.GetType().FullName + ", " + e.Message;
                return(RenameResponse);
            }
        }
Beispiel #12
0
        public static FileExplorerResponse NewFolder(string path, string name)
        {
            FileExplorerResponse CreateResponse = new FileExplorerResponse();

            try
            {
                if (!string.IsNullOrEmpty(name))
                {
                    var physicalPath   = Path.Combine(ToPhysicalPath(ToAbsolute(path)), name);
                    int directoryCount = 0;
                    while (System.IO.Directory.Exists(physicalPath + (directoryCount > 0 ? "(" + directoryCount.ToString() + ")" : "")))
                    {
                        directoryCount++;
                    }
                    physicalPath = physicalPath + (directoryCount > 0 ? "(" + directoryCount.ToString() + ")" : "");
                    if (!Directory.Exists(physicalPath))
                    {
                        name = name + (directoryCount > 0 ? "(" + directoryCount.ToString() + ")" : "");
                        Directory.CreateDirectory(physicalPath);
                        var directories = new[] {
                            GetFileDetails(physicalPath)
                        };
                        CreateResponse.files = directories;
                        return(CreateResponse);
                    }
                    else
                    {
                        throw new ArgumentException();
                    }
                }
                else
                {
                    throw new ArgumentNullException("name should not be null");
                }
            }
            catch (Exception e) {
                CreateResponse.error = e.GetType().FullName + ", " + e.Message;
                return(CreateResponse);
            }
        }
Beispiel #13
0
        public static FileExplorerResponse Remove(string[] names, string path)
        {
            FileExplorerResponse DeleteResponse = new FileExplorerResponse();

            try
            {
                DirectoryContent[] removedFiles = new DirectoryContent[names.Length];
                for (int i = 0; i < names.Length; i++)
                {
                    var fullPath = CombinePaths(ToAbsolute(path), names[i]);
                    if (!string.IsNullOrEmpty(names[i]))
                    {
                        var physicalPath = ToPhysicalPath(fullPath);
                        removedFiles[i] = GetFileDetails(physicalPath);
                        FileAttributes attr = File.GetAttributes(physicalPath);
                        //detect whether its a directory or file
                        if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
                        {
                            DeleteDirectory(physicalPath);
                        }
                        else
                        {
                            System.IO.File.Delete(physicalPath);
                        }
                    }
                    else
                    {
                        throw new ArgumentNullException("name should not be null");
                    }
                }
                DeleteResponse.files = removedFiles;
                return(DeleteResponse);
            }
            catch (Exception e)
            {
                DeleteResponse.error = e.GetType().FullName + ", " + e.Message;
                return(DeleteResponse);
            }
        }
Beispiel #14
0
        public FileExplorerResponse Search(string path, string filter, string searchString, bool caseSensitive)
        {
            FileExplorerResponse SearchResponse = new FileExplorerResponse();

            try
            {
                string          physicalPath   = GetPath(path);
                FileAccessRules RootPermission = GetPathPermission(path);
                if (!RootPermission.Read)
                {
                    throw new ArgumentException("'" + path + "' is not accessible. Access is denied.");
                }
                SearchResponse = FileExplorerOperations.Search(path, filter, searchString, caseSensitive);
                var items = SearchResponse.files.ToArray();
                for (int i = 0; i < items.Length; i++)
                {
                    FileAccessRules PathPermission = GetPathPermission(path + items[i].filterPath.Replace("\\", "/"));
                    if (!PathPermission.Read)
                    {
                        items = items.Where((val, idx) => idx != i).ToArray();
                        i--;
                        continue;
                    }
                    items[i].permission = GetFilePermission(physicalPath + items[i].filterPath, items[i].name, items[i].isFile);
                    if (items[i].isFile)
                    {
                        items[i].permission.EditContents = PathPermission.EditContents;
                        items[i].permission.Upload       = PathPermission.Upload;
                    }
                }
                SearchResponse.files = items;
                return(SearchResponse);
            }
            catch (Exception e)
            {
                SearchResponse.error = e.GetType().FullName + ", " + e.Message;
                return(SearchResponse);
            }
        }
Beispiel #15
0
        public FileExplorerResponse GetDetails(string path, string[] names)
        {
            FileExplorerResponse DetailsResponse = new FileExplorerResponse();

            try
            {
                DetailsResponse = FileExplorerOperations.GetDetails(path, names);
                string physicalPath = GetPath(path);
                var    items        = DetailsResponse.details.ToArray();
                for (int i = 0; i < items.Length; i++)
                {
                    items[i].Permission = GetFilePermission(physicalPath, items[i].Name, items[i].Type != "File Folder");
                }
                DetailsResponse.details = items;
                return(DetailsResponse);
            }
            catch (Exception e)
            {
                DetailsResponse.error = e.GetType().FullName + ", " + e.Message;
                return(DetailsResponse);
            }
        }
Beispiel #16
0
        public static FileExplorerResponse Paste(string sourceDir, string backupDir, string[] fNames, string option, IEnumerable <CommonFileDetails> commonFiles)
        {
            FileExplorerResponse PasteResponse = new FileExplorerResponse();

            try
            {
                if (commonFiles != null)
                {
                    foreach (var file in commonFiles)
                    {
                        file.Path = ToPhysicalPath(ToAbsolute(file.Path));
                    }
                }
                string[] copiedFiles = PasteOperataion(sourceDir, backupDir, fNames, option, commonFiles);
                PasteResponse.files = GetAllFileDetails(backupDir, copiedFiles);
                return(PasteResponse);
            }
            catch (Exception e)
            {
                PasteResponse.error = e.GetType().FullName + ", " + e.Message;
                return(PasteResponse);
            }
        }