/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); } }
/// <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"); } }
/// <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); } } }
/// <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); } }
/// <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); }
/// <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"); } }