示例#1
0
        /// <summary>
        /// Attempts to mount the mount point to the associated device without knowing the device or the type.
        /// Some devices may not support this method.
        /// </summary>
        /// <param name="mountPoint"></param>
        public void Mount(String mountPoint)
        {
            mountPoint.ThrowIfNull("mountPoint");
            Device.ThrowIfNull("Device");

            CommandErrorReceiver cer = new CommandErrorReceiver();

            Device.ExecuteShellCommand("mount {0}", cer, mountPoint);
        }
示例#2
0
        /// <summary>
        /// Unmounts the specified mount point.
        /// </summary>
        /// <param name="mountPoint">The mount point.</param>
        /// <param name="options">The options.</param>
        public void Unmount(String mountPoint, String options)
        {
            mountPoint.ThrowIfNull("mountPoint");
            Device.ThrowIfNull("Device");

            CommandErrorReceiver cer = new CommandErrorReceiver();

            Device.ExecuteShellCommand("umount {1} {0}", cer, !String.IsNullOrEmpty(options) ? String.Format("-o {0}", options) : String.Empty, mountPoint);
        }
示例#3
0
文件: FileSystem.cs 项目: vebin/madb
        /// <summary>
        /// Chmods the specified path.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <param name="permissions">The permissions.</param>
        public void Chmod(String path, String permissions)
        {
            Device.ThrowIfNull("Device");
            path.ThrowIfNullOrWhiteSpace("path");
            permissions.ThrowIfNullOrWhiteSpace("permissions");

            FileEntry entry = this.fileListingService.FindFileEntry(path);
            CommandErrorReceiver cer = new CommandErrorReceiver();
            Device.ExecuteShellCommand("chmod {0} {1}", cer, permissions, entry.FullEscapedPath);
        }
示例#4
0
        /// <summary>
        /// Mounts the specified device.
        /// </summary>
        /// <param name="mountPoint">The mp.</param>
        /// <param name="options">The options.</param>
        public void Mount(MountPoint mountPoint, String options)
        {
            mountPoint.ThrowIfNull("mountPoint");
            Device.ThrowIfNull("Device");

            CommandErrorReceiver cer = new CommandErrorReceiver();

            Device.ExecuteShellCommand("mount {0} {4} -t {1} {2} {3}", cer, mountPoint.IsReadOnly ? "-r" : "-w",
                                       mountPoint.FileSystem, mountPoint.Block, mountPoint.Name,
                                       !String.IsNullOrEmpty(options) ? String.Format("-o {0}", options) : String.Empty);
        }
示例#5
0
        /// <summary>
        /// Chmods the specified path.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <param name="permissions">The permissions.</param>
        public void Chmod(String path, FilePermissions permissions)
        {
            Device.ThrowIfNull("Device");
            path.ThrowIfNullOrWhiteSpace("path");
            permissions.ThrowIfNull("permissions");

            FileEntry            entry = this.fileListingService.FindFileEntry(path);
            CommandErrorReceiver cer   = new CommandErrorReceiver();

            Device.ExecuteShellCommand("chmod {0} {1}", cer, permissions.ToChmod(), entry.FullEscapedPath);
        }
示例#6
0
        /// <summary>
        /// Moves the specified source to the specified destination.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="destination">The destination.</param>
        public void Move(String source, String destination)
        {
            Device.ThrowIfNull("Device");
            source.ThrowIfNullOrWhiteSpace("source");
            destination.ThrowIfNullOrWhiteSpace("destination");

            CommandErrorReceiver cer = new CommandErrorReceiver();
            FileEntry            sfe = this.fileListingService.FindFileEntry(source);

            Device.ExecuteShellCommand("mv {0} {1}", cer, sfe.FullEscapedPath, destination);
            if (!String.IsNullOrEmpty(cer.ErrorMessage))
            {
                throw new IOException(cer.ErrorMessage);
            }
        }
示例#7
0
        /// <summary>
        /// Creates the specified path.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <returns></returns>
        public FileEntry Create(String path)
        {
            Device.ThrowIfNull("Device");

            path.ThrowIfNullOrWhiteSpace("path");

            if (!Device.IsOffline)
            {
                if (Exists(path))
                {
                    throw new ArgumentException("The specified path already exists.");
                }
                else
                {
                    var cer     = new CommandErrorReceiver();
                    var escaped = LinuxPath.Escape(path);
                    // use native touch command if its available.
                    var cmd     = ">";
                    var command = String.Format("{0} {1}", cmd, escaped);
                    if (Device.CanSU())
                    {
                        Device.ExecuteRootShellCommand(command, cer);
                    }
                    else
                    {
                        Device.ExecuteShellCommand(command, cer);
                    }
                    if (!String.IsNullOrEmpty(cer.ErrorMessage))
                    {
                        throw new IOException(String.Format("Error creating file: {0}", cer.ErrorMessage));
                    }
                    else
                    {
                        // at this point, the newly created file should exist.
                        return(this.fileListingService.FindFileEntry(path));
                    }
                }
            }
            else
            {
                throw new IOException("Device is not online");
            }
        }
示例#8
0
        /// <summary>
        /// Deletes the specified path.
        /// </summary>
        /// <param name="fileEntry">The file entry.</param>
        /// <exception cref="System.IO.IOException">If the command fails.</exception>
        public void Delete(FileEntry fileEntry)
        {
            /// <exception cref="System.ArgumentNullException">
            /// If device is null
            /// or
            /// If path is null or empty.
            /// </exception>
            Device.ThrowIfNull("Device");
            fileEntry.ThrowIfNull("fileEntry");
            if (fileEntry.Exists)
            {
                CommandErrorReceiver cer = new CommandErrorReceiver();
                Device.ExecuteShellCommand("rm -f {0} {1}", cer, fileEntry.IsDirectory ? "-r" : String.Empty, fileEntry.FullResolvedPath);

                if (!String.IsNullOrEmpty(cer.ErrorMessage))
                {
                    throw new IOException(cer.ErrorMessage);
                }
            }
        }
示例#9
0
        /// <summary>
        /// Makes the directory.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <param name="forceDeviceMethod">if set to <see langword="true"/> forces the use of the "non-busybox" method.</param>
        public void MakeDirectory(String path, bool forceDeviceMethod)
        {
            Device.ThrowIfNull("Device");
            path.ThrowIfNullOrWhiteSpace("path");

            CommandErrorReceiver cer = new CommandErrorReceiver();

            try
            {
                // if busybox is not available then we have to fallback
                MakeDirectoryFallbackInternal(path, cer);
            }
            catch
            {
            }
            if (!String.IsNullOrEmpty(cer.ErrorMessage))
            {
                throw new IOException(cer.ErrorMessage);
            }
        }
示例#10
0
文件: FileSystem.cs 项目: vebin/madb
 /// <summary>
 /// this is a fallback if the mkdir -p fails for somereason
 /// </summary>
 /// <param name="path"></param>
 /// <param name="cer"></param>
 internal void MakeDirectoryFallbackInternal(String path, CommandErrorReceiver cer)
 {
     Device.ExecuteShellCommand("mkdir {0}", cer, path);
 }
示例#11
0
文件: FileSystem.cs 项目: vebin/madb
        /// <summary>
        /// Creates the specified path.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <returns></returns>
        public FileEntry Create(String path)
        {
            Device.ThrowIfNull("Device");

            path.ThrowIfNullOrWhiteSpace("path");

            if (!Device.IsOffline)
            {
                if (Exists(path))
                {
                    throw new ArgumentException("The specified path already exists.");
                }
                else
                {
                    var cer = new CommandErrorReceiver();
                    var escaped = LinuxPath.Escape(path);
                    // use native touch command if its available.
                    var cmd = ">";
                    var command = String.Format("{0} {1}", cmd, escaped);
                    if (Device.CanSU())
                    {
                        Device.ExecuteRootShellCommand(command, cer);
                    }
                    else
                    {
                        Device.ExecuteShellCommand(command, cer);
                    }
                    if (!String.IsNullOrEmpty(cer.ErrorMessage))
                    {
                        throw new IOException(String.Format("Error creating file: {0}", cer.ErrorMessage));
                    }
                    else
                    {
                        // at this point, the newly created file should exist.
                        return this.fileListingService.FindFileEntry(path);
                    }
                }
            }
            else
            {
                throw new IOException("Device is not online");
            }
        }
示例#12
0
文件: FileSystem.cs 项目: vebin/madb
        /// <summary>
        /// Moves the specified source to the specified destination.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="destination">The destination.</param>
        public void Move(String source, String destination)
        {
            Device.ThrowIfNull("Device");
            source.ThrowIfNullOrWhiteSpace("source");
            destination.ThrowIfNullOrWhiteSpace("destination");

            CommandErrorReceiver cer = new CommandErrorReceiver();
            FileEntry sfe = this.fileListingService.FindFileEntry(source);

            Device.ExecuteShellCommand("mv {0} {1}", cer, sfe.FullEscapedPath, destination);
            if (!String.IsNullOrEmpty(cer.ErrorMessage))
            {
                throw new IOException(cer.ErrorMessage);
            }
        }
示例#13
0
文件: FileSystem.cs 项目: vebin/madb
        /// <summary>
        /// Unmounts the specified mount point.
        /// </summary>
        /// <param name="mountPoint">The mount point.</param>
        /// <param name="options">The options.</param>
        public void Unmount(String mountPoint, String options)
        {
            mountPoint.ThrowIfNull("mountPoint");
            Device.ThrowIfNull("Device");

            CommandErrorReceiver cer = new CommandErrorReceiver();
            Device.ExecuteShellCommand("umount {1} {0}", cer, !String.IsNullOrEmpty(options) ? String.Format("-o {0}", options) : String.Empty, mountPoint);
        }
示例#14
0
文件: FileSystem.cs 项目: vebin/madb
        /// <summary>
        /// Attempts to mount the mount point to the associated device without knowing the device or the type.
        /// Some devices may not support this method.
        /// </summary>
        /// <param name="mountPoint"></param>
        public void Mount(String mountPoint)
        {
            mountPoint.ThrowIfNull("mountPoint");
            Device.ThrowIfNull("Device");

            CommandErrorReceiver cer = new CommandErrorReceiver();
            Device.ExecuteShellCommand("mount {0}", cer, mountPoint);
        }
示例#15
0
文件: FileSystem.cs 项目: vebin/madb
        /// <summary>
        /// Mounts the specified device.
        /// </summary>
        /// <param name="mountPoint">The mp.</param>
        /// <param name="options">The options.</param>
        public void Mount(MountPoint mountPoint, String options)
        {
            mountPoint.ThrowIfNull("mountPoint");
            Device.ThrowIfNull("Device");

            CommandErrorReceiver cer = new CommandErrorReceiver();
            Device.ExecuteShellCommand("mount {0} {4} -t {1} {2} {3}", cer, mountPoint.IsReadOnly ? "-r" : "-w",
                mountPoint.FileSystem, mountPoint.Block, mountPoint.Name,
                !String.IsNullOrEmpty(options) ? String.Format("-o {0}", options) : String.Empty);
        }
示例#16
0
文件: FileSystem.cs 项目: vebin/madb
        /// <summary>
        /// Makes the directory.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <param name="forceDeviceMethod">if set to <see langword="true"/> forces the use of the "non-busybox" method.</param>
        public void MakeDirectory(String path, bool forceDeviceMethod)
        {
            Device.ThrowIfNull("Device");
            path.ThrowIfNullOrWhiteSpace("path");

            CommandErrorReceiver cer = new CommandErrorReceiver();
            try
            {
                // if busybox is not available then we have to fallback
                MakeDirectoryFallbackInternal(path, cer);
            }
            catch
            {

            }
            if (!String.IsNullOrEmpty(cer.ErrorMessage))
            {
                throw new IOException(cer.ErrorMessage);
            }
        }
示例#17
0
文件: FileSystem.cs 项目: vebin/madb
        /// <summary>
        /// Deletes the specified path.
        /// </summary>
        /// <param name="fileEntry">The file entry.</param>
        /// <exception cref="System.IO.IOException">If the command fails.</exception>
        public void Delete(FileEntry fileEntry)
        {
            /// <exception cref="System.ArgumentNullException">
            /// If device is null
            /// or
            /// If path is null or empty.
            /// </exception>
            Device.ThrowIfNull("Device");
            fileEntry.ThrowIfNull("fileEntry");
            if (fileEntry.Exists)
            {
                CommandErrorReceiver cer = new CommandErrorReceiver();
                Device.ExecuteShellCommand("rm -f {0} {1}", cer, fileEntry.IsDirectory ? "-r" : String.Empty, fileEntry.FullResolvedPath);

                if (!String.IsNullOrEmpty(cer.ErrorMessage))
                {
                    throw new IOException(cer.ErrorMessage);
                }
            }
        }
示例#18
0
 /// <summary>
 /// this is a fallback if the mkdir -p fails for somereason
 /// </summary>
 /// <param name="path"></param>
 /// <param name="cer"></param>
 internal void MakeDirectoryFallbackInternal(String path, CommandErrorReceiver cer)
 {
     Device.ExecuteShellCommand("mkdir {0}", cer, path);
 }