Example #1
0
        public static void RemoveAllThatOutdates(string directory, int outdatedDays, FileOrDirectory fileOrDirectory)
        {
            var dirs = fileOrDirectory == FileOrDirectory.Directory
                ? Directory.GetDirectories(directory)
                : Directory.GetFiles(directory);

            foreach (var f in dirs)
            {
                var dt = fileOrDirectory == FileOrDirectory.Directory
                    ? Directory.GetCreationTime(f)
                    : File.GetCreationTime(f);
                var ts = DateTime.Now - dt;
                if (ts.Days <= outdatedDays)
                {
                    continue;
                }
                if (fileOrDirectory == FileOrDirectory.Directory)
                {
                    Directory.Delete(f, true);
                }
                else
                {
                    File.Delete(f);
                }
            }
        }
Example #2
0
        public static void Main(string[] args)
        {
            var window = new Window();
            var left   = window.SplitLeft("left");
            var right  = window.SplitRight("right");

            var cd  = new DirectoryInfo(Environment.CurrentDirectory);
            var dir = cd.Parent.Parent.Parent;

            IEnumerable <FileOrDirectory> items = FileOrDirectory.ReadDir(dir);

            var listview = new ListView <FileOrDirectory>(left, items, i => new[] {
                i.Name,
                i.Size.ToString(),
                i.LastModifiedUTC.ToString("dd MMM yyyy hh:mm")
            }, ("Name", 0), ("Size", 20), ("Modified", 22)); // get algorithm from SplitRows and SplitColumns

            listview.Refresh();

            Console.ReadKey(true);

            // list needs to scroll
            // needs to have a current item
            // needs to highlight items
            // needs to react to arrow keys up and down (to start with)

            // window.Keyboard.OnUp(()=> )
            // window.Keyboard.OnDown(()=> );

            // will need to define exit? to stop
            // window.clear to remove list?
        }
Example #3
0
        public PathDataType(ScriptParameter p, XmlNode DataTypeNode)
        {
            m_Parameter = p;
            m_Path      = p.ParameterValue;
            XmlNode ChildNode = DataTypeNode.FirstChild;

            m_FileOrDirectory = ChildNode.Name == "file" ? FileOrDirectory.File : FileOrDirectory.Directory;
            m_InputOrOutput   = ChildNode.Attributes.GetNamedItem("type").Value == "input" ? InputOrOutput.input : InputOrOutput.output;
        }
Example #4
0
 public FtpDirectory(Sync sync, FileOrDirectory parent, Uri url)
 {
     Sync = sync;
     Parent = parent;
     if (url.Scheme != "ftp" && url.Scheme != "ftps") throw new NotSupportedException();
     Url = url;
     Name = url.File();
     Class = ObjectClass.Directory;
     Changed = DateTime.Now.AddDays(2);
     if (parent is FtpDirectory) TransferProgress = ((FtpDirectory)parent).TransferProgress;
 }
Example #5
0
 public IDirectory CreateDirectory(FileOrDirectory src)
 {
     try {
         string path;
         if (src == null) path = Path;
         else path = System.IO.Path.Combine(Path, src.Name);
         System.IO.Directory.CreateDirectory(path);
         return new LocalDirectory(Sync, this, new Uri(path));
     } catch (Exception ex) {
         Sync.Failure(src, ex);
     }
     return null;
 }
        public void CreateFile(string path)
        {
            var dir = NormalizeDirectory(
                Path.GetDirectoryName(path));

            CreateDirectory(dir);
            var file = new FileOrDirectory
            {
                isDirectory = false,
                path        = path.ToUpperInvariant(),
            };

            fileSystem[dir].Add(file);
        }
Example #7
0
 public LocalDirectory(Sync sync, FileOrDirectory parent, Uri url)
 {
     Sync = sync;
     Parent = parent;
     if (!url.ToString().Contains(':')) {
         if (url.ToString() == ".") url = new Uri(Environment.CurrentDirectory);
         else url = new Uri(System.IO.Path.Combine(Environment.CurrentDirectory, url.ToString()));
     }
     if (!url.IsFile) throw new NotSupportedException("url is no local file.");
     Url = url;
     var info = new DirectoryInfo(Path);
     Name = info.Name;
     Class = ObjectClass.Directory;
     ChangedUtc = info.LastWriteTimeUtc;
 }
        public async override Task <List <string> > AllChildrenToString(string space)
        {
            _theExtension = this.IsFilterByExpension.TheExtension.Substring(this.IsFilterByExpension.TheExtension.IndexOf('.'), this.IsFilterByExpension.TheExtension.Length - this.IsFilterByExpension.TheExtension.IndexOf('.'));
            space        += "";
            return(await Task.Run(async() =>
            {
                List <string> toReturn = new List <string>();
                string tmpStr = string.Empty;

                foreach (Component s in _children)
                {
                    List <string> strLst = await s.AllChildrenToString(space);
                    foreach (string ss in strLst)
                    {
                        if (!string.IsNullOrWhiteSpace(ss) && !string.IsNullOrEmpty(ss) && ss != Environment.NewLine && ss != "\n" && ss != "\r")
                        {
                            if (this.IsFilterByExpension.IsToFilter == false)
                            {
                                toReturn.Add(ss);
                            }
                            else
                            {
                                if (ss.Contains(_theExtension))
                                {
                                    toReturn.Add(ss);
                                }
                            }
                            //addPathEvent?.Invoke(this, ss);
                        }
                    }
                }

                if (this.IsFilterByExpension.IsToFilter == false)
                {
                    toReturn.Add(FileOrDirectory);
                }
                else
                {
                    if (FileOrDirectory.Contains(_theExtension))
                    {
                        toReturn.Add(FileOrDirectory);
                    }
                }
                //addPathEvent?.Invoke(this, FileOrDirectory);

                return toReturn;
            }));
        }
Example #9
0
        public PathDataType(ScriptParameter p, XmlNode DataTypeNode)
        {
            m_Parameter = p;
            m_Path      = p.ParameterValue;
            XmlNode ChildNode = DataTypeNode.FirstChild;

            if (ChildNode.Name == "file")
            {
                m_FileOrDirectory = FileOrDirectory.File;
                FileExtenssion    = GetFileExtensionFromFileNode(ChildNode);
            }
            else
            {
                m_FileOrDirectory = FileOrDirectory.Directory;
            }

            m_InputOrOutput = ChildNode.Attributes.GetNamedItem("type").Value == "input" ? InputOrOutput.input : InputOrOutput.output;
        }
Example #10
0
        /// <summary>
        /// <para>when path does not exist, it returns the closest directory to the specified path</para>
        /// this function is usefull when starting a browse file / directory dialog.
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        /// <example>
        /// <code lang="cs">
        /// string s = GetExistingPath(@"D:\temp\test");
        ///
        /// // returns: "E:\temp\test" when test exists
        /// // returns: "E:\temp" when test does not exist.
        /// // returns: "E:" when temp does not exist.
        /// // returns: Environment.CurrentDirectory when path is null or empty.
        /// // returns: Environment.CurrentDirectory when E: does not exist
        /// // returns: DesktopDirectory when Environment.CurrentDirectory does not exist
        /// </code>
        /// </example>
        public static string GetExistingPath(string path)
        {
            // Remove invalid chars
            path = NormalizeFullPath(path, ' ');
            if (string.IsNullOrEmpty(path))
            {
                // Get currentdirectory when empty
                path = Environment.CurrentDirectory;
            }
            if (string.IsNullOrEmpty(path))
            {
                // when still empty get desktop directory.
                path = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            }

            // use FormatPath object to itterate through parts.

            string[] items = SplitPath(path);

            // while not exist shrink the path.

            foreach (string p in items)
            {
                FileOrDirectory exist = IsFileOrDirectory(p);
                if (exist == FileOrDirectory.Directory || exist == FileOrDirectory.File)
                {
                    path = p;
                }
            }
            if (string.IsNullOrEmpty(path))
            {
                // apperently the path was not valid in it's whole.
                path = Environment.CurrentDirectory;
            }
            if (string.IsNullOrEmpty(path))
            {
                path = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            }
            return(path);
        }
Example #11
0
        public void DeleteDirectory(FileOrDirectory dest)
        {
            FtpClient ftp = null;
            try {
                var dir = (FtpDirectory)dest;
                int con = FtpConnections.Count(IsSource, dir.url);
                if (con == 0) con = 1;
                var list = dir.List();

                Parallel.ForEach<FtpDirectory>(list.OfType<FtpDirectory>(), new ParallelOptions { MaxDegreeOfParallelism = con }, (d) => { d.DeleteDirectory(d); });

                ftp = FtpConnections.Open(IsSource, ref dir.url);

                con = FtpConnections.Count(IsSource, dir.url);
                if (con == 0) con = 1;

                foreach (var file in list.Where(f => f.Class == ObjectClass.File)) ftp.DeleteFile(file.Name);

                ftp.ChangeDirectory(ftp.CorrectPath("/" + dest.RelativePath));
                ftp.ChangeDirectoryUp();
                ftp.DeleteDirectory(dest.Name);
            } catch (Exception ex) {
                Sync.Failure(dest, ex, ftp);
            } finally {
                if (ftp != null) FtpConnections.Pass(ftp);
            }
        }
Example #12
0
 public void Delete(FileOrDirectory dest)
 {
     if (dest.Class == ObjectClass.File) DeleteFile(dest);
     else DeleteDirectory(dest);
 }
Example #13
0
        /// <summary>
        ///     Search Exection
        /// </summary>
        /// <param name="uncDirectoryPath">Start directory path</param>
        /// <param name="pattern">Search pattern. Uses Win32 native filtering.</param>
        /// <param name="searchOption">
        ///     <see cref="SearchOption" />
        /// </param>
        /// <param name="enumerateOptions">The enumeration options for exception handling</param>
        /// <param name="pathFormatReturn">Specifies the type of path to return.</param>
        /// <param name="filterType">
        ///     <see cref="FileOrDirectory" />
        /// </param>
        /// <returns>Collection of path</returns>
        static IEnumerable<String> FindPaths(String uncDirectoryPath, String pattern = "*", SearchOption searchOption = SearchOption.TopDirectoryOnly, FileOrDirectory? filterType = null, SuppressExceptions enumerateOptions = SuppressExceptions.None, UncOrRegular pathFormatReturn = UncOrRegular.Regular)
        {
            // Result Container
            var results = new List<String>();

            // Match for start of search
            string currentPath = PathTools.Combine(uncDirectoryPath, pattern);

            // Find First file
            var win32FindData = new Win32FindData();
            int win32Error;
            using (var fileHandle = FindFirstSafeFileHandle(currentPath, win32FindData, out win32Error))
            {
                // Take care of invalid handles
                if (fileHandle.IsInvalid && EnumerationHandleInvalidFileHandle(uncDirectoryPath, enumerateOptions, win32Error))
                {
                    return new List<String>();
                }

                do
                {
                    // Ignore . and .. directories
                    if (IsSystemDirectoryEntry(win32FindData))
                    {
                        continue;
                    }

                    // Create hit for current search result
                    string resultPath = PathTools.Combine(uncDirectoryPath, win32FindData.cFileName);

                    // if it's a file, add to the collection
                    if (!ContainsFileAttribute(win32FindData.dwFileAttributes, FileAttributes.Directory))
                    {
                        if (filterType == null || ((FileOrDirectory)filterType == FileOrDirectory.File))
                        {
                            // It's a file
                            results.Add(FormatPathByType(pathFormatReturn, resultPath));
                        }
                    }
                    else
                    {
                        // It's a directory
                        // Check for search searchFocus directories
                        if (filterType != null && ((FileOrDirectory)filterType == FileOrDirectory.Directory))
                        {
                            results.Add(FormatPathByType(pathFormatReturn, resultPath));
                        }

                        // SubFolders?!
                        if (searchOption == SearchOption.AllDirectories)
                        {
                            var r = new List<String>(FindPaths(resultPath, pattern, searchOption, filterType, enumerateOptions));
                            if (r.Count > 0)
                            {
                                results.AddRange(r);
                            }
                        }
                    }

                    // Create new FindData object for next result
                    win32FindData = new Win32FindData();
                } // Search for next entry
                while (Win32SafeNativeMethods.FindNextFile(fileHandle, win32FindData));
            }
            // Return result;
            return results;
        }
 private static string[] FindPaths(FileOrDirectory FileOrDirectory, string directory, string wildCard)
 {
     if (FileOrDirectory == FileSystem.FileOrDirectory.Directory)
     {
         if (wildCard == "")
         {
             return Directory.GetDirectories(directory);
         }
         return Directory.GetDirectories(directory, wildCard);
     }
     if (wildCard == "")
     {
         return Directory.GetFiles(directory);
     }
     return Directory.GetFiles(directory, wildCard);
 }
Example #15
0
 public Stream ReadFile(FileOrDirectory src)
 {
     try {
         var path = System.IO.Path.Combine(Path, src.Name);
         return File.OpenRead(path);
     } catch (Exception ex) {
         Sync.Failure(src, ex);
     }
     return null;
 }
Example #16
0
        public IDirectory CreateDirectory(FileOrDirectory dest)
        {
            FtpClient ftp = null;
            try {
                ftp = FtpConnections.Open(IsSource, ref url);

                //var path = ftp.CorrectPath(Url.Path());
                //if (dest != null) path = path + "/" + dest.Name;
                //var curpath = ftp.CurrentDirectory;
                //var ps = path.Split('/');
                //var cs = curpath.Split('/');
                //var j = cs.Length-1;
                //var i = Math.Min(ps.Length, j+1);
                //while (j > i-1) { ftp.ChangeDirectoryUp(); j--; }
                //while (j > 0 && ps[j] != cs[j]) { ftp.ChangeDirectoryUp(); j--; i = j+1; }

                //while (i < ps.Length) { str.Append("/"); str.Append(ps[i++]); }

                //var dir = str.ToString();
                ftp.MakeDirectory(dest.Name);

                //if (url.Query()["old"] != null) ftp.ChangeDirectoryMultiPath(path);
                //else ftp.ChangeDirectory(path);

                if (dest != null) return new FtpDirectory(Sync, this, Url.Relative(dest.Name));
                else return this;
            } catch (Exception ex) {
                Sync.Failure(dest, ex, ftp);
            } finally {
                if (ftp != null) FtpConnections.Pass(ftp);
            }
            return null;
        }
Example #17
0
        public void WriteFile(System.IO.Stream file, FileOrDirectory src)
        {
            FtpClient ftp = null;
            try {
                if (file == null) return;

                ftp = FtpConnections.Open(IsSource, ref url);

                var path = Url.Path() + "/" + src.Name;
                var start = DateTime.Now;

                if (!UseFXP) {
                    if (ftp.FileTransferType != TransferType.Binary) ftp.FileTransferType = TransferType.Binary;
                    if (TransferProgress) {
                        progress[ftp] = new ProgressData { ElapsedTime = new TimeSpan(0), Path = path, Size = src.Size };
                        ftp.TransferProgress += ShowProgress;
                    }
                    ftp.PutFile(file, src.Name, FileAction.Create);
                } else { // use FXP for direct server to server transfer.
                    var srcftp = (FtpStream)file;
                    srcftp.Client.FxpCopy(src.Name, ftp);
                }
                ftp.SetDateTime(src.Name, src.ChangedUtc);

                Log.Upload(path, src.Size, DateTime.Now - start);
            } catch (Exception e) {
                Sync.Failure(src, e, ftp);
            } finally {
                if (ftp != null) {
                    if (TransferProgress) {
                        ftp.TransferProgress -= ShowProgress;
                        progress.Remove(ftp);
                    }
                    FtpConnections.Pass(ftp);
                }
            }
        }
Example #18
0
 public void DeleteFile(FileOrDirectory dest)
 {
     try {
         var path = System.IO.Path.Combine(Path, dest.Name);
         if (path != Sync.Log.LogFile) System.IO.File.Delete(path);
     } catch (Exception ex) {
         Sync.Failure(dest, ex);
     }
 }
Example #19
0
 public void DeleteDirectory(FileOrDirectory dest)
 {
     try {
         System.IO.Directory.Delete(((LocalDirectory)dest).Path, true);
     } catch (Exception ex) {
         Sync.Failure(dest, ex);
     }
 }
 private static ReadOnlyCollection<string> FindFilesOrDirectories(FileOrDirectory FileOrDirectory, string directory, Microsoft.VisualBasic.FileIO.SearchOption searchType, string[] wildcards)
 {
     Collection<string> results = new Collection<string>();
     FindFilesOrDirectories(FileOrDirectory, directory, searchType, wildcards, results);
     return new ReadOnlyCollection<string>(results);
 }
 private static void ShellFileOperation(Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFileOperationType OperationType, Microsoft.VisualBasic.CompilerServices.NativeMethods.ShFileOperationFlags OperationFlags, string FullSource, string FullTarget, UICancelOption OnUserCancel, FileOrDirectory FileOrDirectory)
 {
     int num;
     new UIPermission(UIPermissionWindow.SafeSubWindows).Demand();
     FileIOPermissionAccess noAccess = FileIOPermissionAccess.NoAccess;
     if (OperationType == Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFileOperationType.FO_COPY)
     {
         noAccess = FileIOPermissionAccess.Read;
     }
     else if (OperationType == Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFileOperationType.FO_MOVE)
     {
         noAccess = FileIOPermissionAccess.Write | FileIOPermissionAccess.Read;
     }
     else if (OperationType == Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFileOperationType.FO_DELETE)
     {
         noAccess = FileIOPermissionAccess.Write;
     }
     string fullDirectoryPath = FullSource;
     if (((OperationType == Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFileOperationType.FO_COPY) || (OperationType == Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFileOperationType.FO_MOVE)) && fullDirectoryPath.EndsWith("*", StringComparison.Ordinal))
     {
         fullDirectoryPath = RemoveEndingSeparator(FullSource.TrimEnd(new char[] { '*' }));
     }
     if (FileOrDirectory == FileSystem.FileOrDirectory.Directory)
     {
         DemandDirectoryPermission(fullDirectoryPath, noAccess);
     }
     else
     {
         new FileIOPermission(noAccess, fullDirectoryPath).Demand();
     }
     if (OperationType != Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFileOperationType.FO_DELETE)
     {
         if (FileOrDirectory == FileSystem.FileOrDirectory.Directory)
         {
             DemandDirectoryPermission(FullTarget, FileIOPermissionAccess.Write);
         }
         else
         {
             new FileIOPermission(FileIOPermissionAccess.Write, FullTarget).Demand();
         }
     }
     Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFILEOPSTRUCT lpFileOp = GetShellOperationInfo(OperationType, OperationFlags, FullSource, FullTarget);
     new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert();
     try
     {
         num = Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFileOperation(ref lpFileOp);
         Microsoft.VisualBasic.CompilerServices.NativeMethods.SHChangeNotify(0x2381f, 3, IntPtr.Zero, IntPtr.Zero);
     }
     catch (Exception)
     {
         throw;
     }
     finally
     {
         CodeAccessPermission.RevertAssert();
     }
     if (lpFileOp.fAnyOperationsAborted)
     {
         if (OnUserCancel == UICancelOption.ThrowException)
         {
             throw new OperationCanceledException();
         }
     }
     else if (num != 0)
     {
         ThrowWinIOError(num);
     }
 }
 private static void ShellDelete(string FullPath, UIOptionInternal ShowUI, RecycleOption recycle, UICancelOption OnUserCancel, FileOrDirectory FileOrDirectory)
 {
     Microsoft.VisualBasic.CompilerServices.NativeMethods.ShFileOperationFlags operationFlags = GetOperationFlags(ShowUI);
     if (recycle == RecycleOption.SendToRecycleBin)
     {
         operationFlags |= Microsoft.VisualBasic.CompilerServices.NativeMethods.ShFileOperationFlags.FOF_ALLOWUNDO;
     }
     ShellFileOperation(Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFileOperationType.FO_DELETE, operationFlags, FullPath, null, OnUserCancel, FileOrDirectory);
 }
 private static void ShellCopyOrMove(CopyOrMove Operation, FileOrDirectory TargetType, string FullSourcePath, string FullTargetPath, UIOptionInternal ShowUI, UICancelOption OnUserCancel)
 {
     Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFileOperationType type;
     if (Operation == CopyOrMove.Copy)
     {
         type = Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFileOperationType.FO_COPY;
     }
     else
     {
         type = Microsoft.VisualBasic.CompilerServices.NativeMethods.SHFileOperationType.FO_MOVE;
     }
     Microsoft.VisualBasic.CompilerServices.NativeMethods.ShFileOperationFlags operationFlags = GetOperationFlags(ShowUI);
     string fullSource = FullSourcePath;
     if (TargetType == FileOrDirectory.Directory)
     {
         if (Directory.Exists(FullTargetPath))
         {
             fullSource = Path.Combine(FullSourcePath, "*");
         }
         else
         {
             Directory.CreateDirectory(GetParentPath(FullTargetPath));
         }
     }
     ShellFileOperation(type, operationFlags, fullSource, FullTargetPath, OnUserCancel, TargetType);
     if ((((Operation == CopyOrMove.Move) & (TargetType == FileOrDirectory.Directory)) && Directory.Exists(FullSourcePath)) && ((Directory.GetDirectories(FullSourcePath).Length == 0) && (Directory.GetFiles(FullSourcePath).Length == 0)))
     {
         Directory.Delete(FullSourcePath, false);
     }
 }
Example #24
0
 public void DeleteFile(FileOrDirectory dest)
 {
     FtpClient ftp = null;
     try {
         ftp = FtpConnections.Open(IsSource, ref url);
         ftp.DeleteFile(dest.Name);
     } catch (Exception ex) {
         Sync.Failure(dest, ex, ftp);
     } finally {
         if (ftp != null) FtpConnections.Pass(ftp);
     }
 }
Example #25
0
 public System.IO.Stream ReadFile(FileOrDirectory src)
 {
     FtpClient ftp = null;
     Task task = null;
     try {
         ftp = FtpConnections.Open(IsSource, ref url);
         if (ftp.FileTransferType != TransferType.Binary) ftp.FileTransferType = TransferType.Binary;
         var file = new FtpStream();
         file.Client = ftp;
         file.Path = Url.Path() + "/" + src.Name;
         file.Size = src.Size;
         file.File = src;
         file.Log = Log;
         if (!UseFXP) {
             task = Services.Tasks.Do(() => {
                 using (file) {
                     try {
                         if (TransferProgress) {
                             progress[file.Client] = new ProgressData { ElapsedTime = new TimeSpan(0), Path = file.Path, Size = file.Size };
                             file.Client.TransferProgress += ShowProgress;
                         }
                         file.Start = DateTime.Now;
                         ftp.GetFile(file.File.Name, file, false);
                     } catch (Exception ex) {
                         file.Exception(ex);
                         Sync.Failure(file.File, ex, file.Client);
                     } finally {
                         if (TransferProgress) {
                             file.Client.TransferProgress -= ShowProgress;
                             progress.Remove(file.Client);
                         }
                     }
                 }
             });
         }
         return file;
     } catch (Exception e) {
         Sync.Failure(src, e, ftp);
     } finally {
         if (task == null && ftp != null) FtpConnections.Pass(ftp);
     }
     return null;
 }
        public static void ShellFileOperation(SHFileOperationType OperationType, ShFileOperationFlags OperationFlags, string FullSource, string FullTarget, UICancelOption OnUserCancel, FileOrDirectory FileOrDirectory)
        {
            int num;

            new UIPermission(UIPermissionWindow.SafeSubWindows).Demand();
            FileIOPermissionAccess noAccess = FileIOPermissionAccess.NoAccess;

            if (OperationType == SHFileOperationType.FO_COPY)
            {
                noAccess = FileIOPermissionAccess.Read;
            }
            else if (OperationType == SHFileOperationType.FO_MOVE)
            {
                noAccess = FileIOPermissionAccess.Write | FileIOPermissionAccess.Read;
            }
            else if (OperationType == SHFileOperationType.FO_DELETE)
            {
                noAccess = FileIOPermissionAccess.Write;
            }
            string fullDirectoryPath = FullSource;

            if (((OperationType == SHFileOperationType.FO_COPY) || (OperationType == SHFileOperationType.FO_MOVE)) && fullDirectoryPath.EndsWith("*", StringComparison.Ordinal))
            {
                fullDirectoryPath = RemoveEndingSeparator(FullSource.TrimEnd(new char[] { '*' }));
            }
            if (FileOrDirectory == FileOrDirectory.Directory)
            {
                DemandDirectoryPermission(fullDirectoryPath, noAccess);
            }
            else
            {
                new FileIOPermission(noAccess, fullDirectoryPath).Demand();
            }
            if (OperationType != SHFileOperationType.FO_DELETE)
            {
                if (FileOrDirectory == FileOrDirectory.Directory)
                {
                    DemandDirectoryPermission(FullTarget, FileIOPermissionAccess.Write);
                }
                else
                {
                    new FileIOPermission(FileIOPermissionAccess.Write, FullTarget).Demand();
                }
            }
            SHFILEOPSTRUCT lpFileOp = GetShellOperationInfo(OperationType, OperationFlags, FullSource, FullTarget);

            new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert();
            try
            {
                num = SHFileOperation(ref lpFileOp);
                SHChangeNotify(145439, 3, IntPtr.Zero, IntPtr.Zero);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                CodeAccessPermission.RevertAssert();
            }
            if (lpFileOp.fAnyOperationsAborted)
            {
                if (OnUserCancel == UICancelOption.ThrowException)
                {
                    throw new OperationCanceledException();
                }
            }
            else if (num != 0)
            {
                ThrowWinIOError(num);
            }
        }
Example #27
0
 public void Delete(FileOrDirectory dest)
 {
     try {
         var path = System.IO.Path.Combine(Path, dest.Name);
         if (dest.Class == ObjectClass.File) {
             if (path != Sync.Log.LogFile) System.IO.File.Delete(path);
         }  else System.IO.Directory.Delete(path, true);
     } catch (Exception ex) {
         Sync.Failure(dest, ex);
     }
 }
Example #28
0
 public void Failure(FileOrDirectory file, Exception ex, FtpClient ftp)
 {
     lock (Failures) Failures.Enqueue(new FailureInfo { File=file, Exception = ex }); Log.Exception(ftp, ex);
 }
Example #29
0
 public void WriteFile(Stream sstream, FileOrDirectory src)
 {
     if (sstream == null) return;
     try {
         var path = System.IO.Path.Combine(Path, src.Name);
         using (var dstream = File.Create(path)) {
             if (sstream is Silversite.Services.PipeStream) {
                 ((Silversite.Services.PipeStream)sstream).CopyTo(dstream);
             } else {
                 Streams.Copy(sstream, dstream);
             }
         }
         File.SetLastAccessTimeUtc(path, src.ChangedUtc);
     } catch (Exception ex) {
         Sync.Failure(src, ex);
     }
 }
Example #30
0
 IDirectory Root(FileOrDirectory fd)
 {
     if (fd.Parent == null) return (IDirectory)fd; else return Root(fd.Parent);
 }
        public static void ShellDelete(string FullPath, RecycleOption recycle, UICancelOption OnUserCancel, FileOrDirectory FileOrDirectory)
        {
            ShFileOperationFlags operationFlags = ShFileOperationFlags.FOF_SILENT | ShFileOperationFlags.FOF_NOCONFIRMATION;

            if (recycle == RecycleOption.SendToRecycleBin)
            {
                operationFlags |= ShFileOperationFlags.FOF_ALLOWUNDO;
            }
            ShellFileOperation(SHFileOperationType.FO_DELETE, operationFlags, FullPath, null, OnUserCancel, FileOrDirectory);
        }
 private static void FindFilesOrDirectories(FileOrDirectory FileOrDirectory, string directory, Microsoft.VisualBasic.FileIO.SearchOption searchType, string[] wildcards, Collection<string> Results)
 {
     VerifySearchOption("searchType", searchType);
     directory = NormalizePath(directory);
     if (wildcards != null)
     {
         foreach (string str in wildcards)
         {
             if (str.TrimEnd(new char[0]) == "")
             {
                 throw ExceptionUtils.GetArgumentNullException("wildcards", "IO_GetFiles_NullPattern", new string[0]);
             }
         }
     }
     if ((wildcards == null) || (wildcards.Length == 0))
     {
         AddToStringCollection(Results, FindPaths(FileOrDirectory, directory, null));
     }
     else
     {
         foreach (string str2 in wildcards)
         {
             AddToStringCollection(Results, FindPaths(FileOrDirectory, directory, str2));
         }
     }
     if (searchType == Microsoft.VisualBasic.FileIO.SearchOption.SearchAllSubDirectories)
     {
         foreach (string str3 in Directory.GetDirectories(directory))
         {
             FindFilesOrDirectories(FileOrDirectory, str3, searchType, wildcards, Results);
         }
     }
 }