TransferOptions.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Runtime.InteropServices;
  5. namespace WinSCP
  6. {
  7. [Guid("6B19CBFA-0D81-4B36-A587-E11AA6A06214")]
  8. [ComVisible(true)]
  9. public enum TransferMode
  10. {
  11. Binary = 0,
  12. Ascii = 1,
  13. Automatic = 2,
  14. }
  15. [Guid("155B841F-39D4-40C8-BA87-C79675E14CE3")]
  16. [ClassInterface(Constants.ClassInterface)]
  17. [ComVisible(true)]
  18. public sealed class TransferOptions
  19. {
  20. public bool PreserveTimestamp { get; set; }
  21. public FilePermissions FilePermissions { get; set; }
  22. public TransferMode TransferMode { get; set; }
  23. public string FileMask { get; set; }
  24. public TransferResumeSupport ResumeSupport { get; private set; }
  25. public int SpeedLimit { get; set; }
  26. public TransferOptions()
  27. {
  28. PreserveTimestamp = true;
  29. TransferMode = TransferMode.Binary;
  30. ResumeSupport = new TransferResumeSupport();
  31. }
  32. internal string ToSwitches()
  33. {
  34. List<string> switches = new List<string>();
  35. if (FilePermissions != null)
  36. {
  37. switches.Add(Session.FormatSwitch("permissions", FilePermissions.Octal));
  38. }
  39. else
  40. {
  41. switches.Add("-nopermissions");
  42. }
  43. switches.Add(Session.BooleanSwitch(PreserveTimestamp, "preservetime", "nopreservetime"));
  44. string transferModeName;
  45. switch (TransferMode)
  46. {
  47. case TransferMode.Binary:
  48. transferModeName = "binary";
  49. break;
  50. case TransferMode.Ascii:
  51. transferModeName = "ascii";
  52. break;
  53. case TransferMode.Automatic:
  54. transferModeName = "automatic";
  55. break;
  56. default:
  57. throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "{0} is not supported", TransferMode));
  58. }
  59. switches.Add(Session.FormatSwitch("transfer", transferModeName));
  60. if (!string.IsNullOrEmpty(FileMask))
  61. {
  62. switches.Add(Session.FormatSwitch("filemask", FileMask));
  63. }
  64. if (ResumeSupport.State != TransferResumeSupportState.Default)
  65. {
  66. switches.Add(Session.FormatSwitch("resumesupport", ResumeSupport.ToString()));
  67. }
  68. if (SpeedLimit > 0)
  69. {
  70. switches.Add(Session.FormatSwitch("speed", SpeedLimit.ToString(CultureInfo.InvariantCulture)));
  71. }
  72. return string.Join(" ", switches.ToArray());
  73. }
  74. }
  75. }