コード例 #1
0
        /// <summary>
        /// Makes the directory.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <param name="forceDeviceMethod">if set to <c>true</c> 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 {
                //var fileEntry = FileEntry.FindOrCreate ( Device, path );
                // if we have busybox we can use the mkdir in there as it supports --parents
                if (Device.BusyBox.Available && !forceDeviceMethod)
                {
                    try {
                        Device.BusyBox.ExecuteShellCommand("mkdir -p {0}", cer, path);
                    } catch {
                        try {
                            // if there was an error, then fallback too.
                            MakeDirectoryFallbackInternal(path, cer);
                        } catch { }
                    }
                }
                else
                {
                    // if busybox is not available then we have to fallback
                    MakeDirectoryFallbackInternal(path, cer);
                }
            } catch {
            }
            if (!string.IsNullOrEmpty(cer.ErrorMessage))
            {
                throw new IOException(cer.ErrorMessage);
            }
        }
コード例 #2
0
ファイル: FileSystem.cs プロジェクト: SwerveRobotics/tools
        /// <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 = Device.FileListingService.FindFileEntry ( path );
            CommandErrorReceiver cer = new CommandErrorReceiver ( );
            Device.ExecuteShellCommand ( "chmod {0} {1}", cer, permissions, entry.FullEscapedPath );
        }
コード例 #3
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 = Device.FileListingService.FindFileEntry(path);
            CommandErrorReceiver cer   = new CommandErrorReceiver( );

            Device.ExecuteShellCommand("chmod {0} {1}", cer, permissions.ToChmod( ), entry.FullEscapedPath);
        }
コード例 #4
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 = Device.FileListingService.FindFileEntry(source);

            Device.ExecuteShellCommand("mv {0} {1}", cer, sfe.FullEscapedPath, destination);
            if (!string.IsNullOrEmpty(cer.ErrorMessage))
            {
                throw new IOException(cer.ErrorMessage);
            }
        }
コード例 #5
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( );

            if (Device.BusyBox.Available)
            {
                Device.ExecuteShellCommand("busybox umount {1} {0}", cer, !string.IsNullOrEmpty(options) ? string.Format("-o {0}", options) : string.Empty, mountPoint);
            }
            else
            {
                Device.ExecuteShellCommand("umount {1} {0}", cer, !string.IsNullOrEmpty(options) ? string.Format("-o {0}", options) : string.Empty, mountPoint);
            }
        }
コード例 #6
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( );

            if (Device.BusyBox.Available)
            {
                Device.ExecuteShellCommand("busybox mount {0}", cer, mountPoint);
            }
            else
            {
                Device.ExecuteShellCommand("mount {0}", cer, mountPoint);
            }
        }
コード例 #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     = Device.BusyBox.Available ? "touch" : ">";
                    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(Device.FileListingService.FindFileEntry(path));
                    }
                }
            }
            else
            {
                throw new IOException("Device is not online");
            }
        }
コード例 #8
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( );

            if (Device.BusyBox.Available)
            {
                Device.ExecuteShellCommand("busybox 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);
            }
            else
            {
                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);
            }
        }
コード例 #9
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);
                }
            }
        }
コード例 #10
0
ファイル: FileSystem.cs プロジェクト: SwerveRobotics/tools
        /// <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 = Device.BusyBox.Available ? "touch" : ">";
                    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 Device.FileListingService.FindFileEntry ( path );
                    }
                }
            } else {
                throw new IOException ( "Device is not online" );
            }
        }
コード例 #11
0
ファイル: FileSystem.cs プロジェクト: SwerveRobotics/tools
        /// <summary>
        /// Makes the directory.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <param name="forceDeviceMethod">if set to <c>true</c> 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 {
                //var fileEntry = FileEntry.FindOrCreate ( Device, path );
                // if we have busybox we can use the mkdir in there as it supports --parents
                if ( Device.BusyBox.Available && !forceDeviceMethod ) {
                    try {
                        Device.BusyBox.ExecuteShellCommand ( "mkdir -p {0}", cer, path );
                    } catch {
                        try {
                            // if there was an error, then fallback too.
                            MakeDirectoryFallbackInternal ( path, cer );
                        } catch { }
                    }
                } else {
                    // if busybox is not available then we have to fallback
                    MakeDirectoryFallbackInternal ( path, cer );
                }
            } catch {

            }
            if ( !string.IsNullOrEmpty ( cer.ErrorMessage ) ) {
                throw new IOException ( cer.ErrorMessage );
            }
        }
コード例 #12
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);
 }
コード例 #13
0
ファイル: FileSystem.cs プロジェクト: SwerveRobotics/tools
        /// <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 ( );
            if ( Device.BusyBox.Available ) {
                Device.ExecuteShellCommand ( "busybox 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 );
            } else {
                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 );
            }
        }
コード例 #14
0
ファイル: FileSystem.cs プロジェクト: SwerveRobotics/tools
        /// <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 );
                }
            }
        }
コード例 #15
0
ファイル: FileSystem.cs プロジェクト: SwerveRobotics/tools
        /// <summary>
        /// Copies the specified source to the specified destination.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="destination">The destination.</param>
        public void Copy(string source, string destination )
        {
            Device.ThrowIfNull ( "Device" );
            source.ThrowIfNullOrWhiteSpace ( "source" );
            destination.ThrowIfNullOrWhiteSpace ( "destination" );

            CommandErrorReceiver cer = new CommandErrorReceiver ( );
            FileEntry sfe = Device.FileListingService.FindFileEntry ( source );

            Device.ExecuteShellCommand ( "cat {0} > {1}", cer, sfe.FullEscapedPath, destination );
            if ( !string.IsNullOrEmpty ( cer.ErrorMessage ) ) {
                throw new IOException ( cer.ErrorMessage );
            }
        }
コード例 #16
0
ファイル: FileSystem.cs プロジェクト: SwerveRobotics/tools
        /// <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 ( );
            if ( Device.BusyBox.Available ) {
                Device.ExecuteShellCommand ( "busybox mount {0}", cer, mountPoint );
            } else {
                Device.ExecuteShellCommand ( "mount {0}", cer, mountPoint );
            }
        }
コード例 #17
0
ファイル: FileSystem.cs プロジェクト: SwerveRobotics/tools
 /// <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 );
 }
コード例 #18
0
ファイル: FileSystem.cs プロジェクト: SwerveRobotics/tools
        /// <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 ( );
            if ( Device.BusyBox.Available ) {
                Device.ExecuteShellCommand ( "busybox umount {1} {0}", cer, !string.IsNullOrEmpty ( options ) ? string.Format ( "-o {0}", options ) : string.Empty, mountPoint );
            } else {
                Device.ExecuteShellCommand ( "umount {1} {0}", cer, !string.IsNullOrEmpty ( options ) ? string.Format ( "-o {0}", options ) : string.Empty, mountPoint );
            }
        }