Files
NewsCrawler/FluentFTP/Helpers/FtpListItem.cs
2018-01-02 01:11:53 +09:00

297 lines
6.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Globalization;
using System.Threading;
namespace FluentFTP {
/// <summary>
/// Represents a file system object on the server
/// </summary>
/// <example><code source="..\Examples\CustomParser.cs" lang="cs" /></example>
public class FtpListItem {
/// <summary>
/// Blank constructor; Fill args manually.
///
/// NOTE TO USER : You should not need to construct this class manually except in advanced cases. Typically constructed by GetListing().
/// </summary>
public FtpListItem() {
}
/// <summary>
/// Constructor with mandatory args filled.
///
/// NOTE TO USER : You should not need to construct this class manually except in advanced cases. Typically constructed by GetListing().
/// </summary>
public FtpListItem(string raw, string name, long size, bool isDir, ref DateTime lastModifiedTime) {
m_input = raw;
m_name = name;
m_size = size;
m_type = isDir ? FtpFileSystemObjectType.Directory : FtpFileSystemObjectType.File;
m_modified = lastModifiedTime;
}
FtpFileSystemObjectType m_type = 0;
/// <summary>
/// Gets the type of file system object.
/// </summary>
public FtpFileSystemObjectType Type {
get {
return m_type;
}
set {
m_type = value;
}
}
string m_path = null;
/// <summary>
/// Gets the full path name to the object.
/// </summary>
public string FullName {
get {
return m_path;
}
set {
m_path = value;
}
}
string m_name = null;
/// <summary>
/// Gets the name of the object.
/// </summary>
public string Name {
get {
if (m_name == null && m_path != null)
return m_path.GetFtpFileName();
return m_name;
}
set {
m_name = value;
}
}
string m_linkTarget = null;
/// <summary>
/// Gets the target a symbolic link points to.
/// </summary>
public string LinkTarget {
get {
return m_linkTarget;
}
set {
m_linkTarget = value;
}
}
int m_linkCount = 0;
/// <summary>
/// Gets the number of links pointing to this file. Only supplied by Unix servers.
/// </summary>
public int LinkCount {
get {
return m_linkCount;
}
set {
m_linkCount = value;
}
}
FtpListItem m_linkObject = null;
/// <summary>
/// Gets the object that the LinkTarget points to. This property is null unless you pass the
/// <see cref="FtpListOption.DerefLinks"/> flag in which case GetListing() will try to resolve
/// the target itself.
/// </summary>
public FtpListItem LinkObject {
get {
return m_linkObject;
}
set {
m_linkObject = value;
}
}
DateTime m_modified = DateTime.MinValue;
/// <summary>
/// Gets the last write time of the object.
/// </summary>
public DateTime Modified {
get {
return m_modified;
}
set {
m_modified = value;
}
}
DateTime m_created = DateTime.MinValue;
/// <summary>
/// Gets the created date of the object.
/// </summary>
public DateTime Created {
get {
return m_created;
}
set {
m_created = value;
}
}
long m_size = -1;
/// <summary>
/// Gets the size of the object.
/// </summary>
public long Size {
get {
return m_size;
}
set {
m_size = value;
}
}
FtpSpecialPermissions m_specialPermissions = FtpSpecialPermissions.None;
/// <summary>
/// Gets special UNIX permissions such as Sticky, SUID and SGID.
/// </summary>
public FtpSpecialPermissions SpecialPermissions {
get {
return m_specialPermissions;
}
set {
m_specialPermissions = value;
}
}
FtpPermission m_ownerPermissions = FtpPermission.None;
/// <summary>
/// Gets the owner permissions.
/// </summary>
public FtpPermission OwnerPermissions {
get {
return m_ownerPermissions;
}
set {
m_ownerPermissions = value;
}
}
FtpPermission m_groupPermissions = FtpPermission.None;
/// <summary>
/// Gets the group permissions.
/// </summary>
public FtpPermission GroupPermissions {
get {
return m_groupPermissions;
}
set {
m_groupPermissions = value;
}
}
FtpPermission m_otherPermissions = FtpPermission.None;
/// <summary>
/// Gets the others permissions.
/// </summary>
public FtpPermission OthersPermissions {
get {
return m_otherPermissions;
}
set {
m_otherPermissions = value;
}
}
string m_rawPermissions = null;
/// <summary>
/// Gets the raw string received for the file permissions.
/// Use this if the other properties are blank/invalid.
/// </summary>
public string RawPermissions {
get {
return m_rawPermissions;
}
set {
m_rawPermissions = value;
}
}
int m_chmod = 0;
/// <summary>
/// Gets the file permissions in the CHMOD format.
/// </summary>
public int Chmod {
get {
return m_chmod;
}
set {
m_chmod = value;
}
}
/// <summary>
/// Gets the raw string received for the file's GROUP permissions.
/// Use this if the other properties are blank/invalid.
/// </summary>
public string RawGroup = null;
/// <summary>
/// Gets the raw string received for the file's OWNER permissions.
/// Use this if the other properties are blank/invalid.
/// </summary>
public string RawOwner = null;
string m_input = null;
/// <summary>
/// Gets the input string that was parsed to generate the
/// values in this object.
/// </summary>
public string Input {
get {
return m_input;
}
set {
m_input = value;
}
}
/// <summary>
/// Returns a string representation of this object and its properties
/// </summary>
/// <returns>A string representing this object</returns>
public override string ToString() {
StringBuilder sb = new StringBuilder();
if (Type == FtpFileSystemObjectType.File) {
sb.Append("FILE");
} else if (Type == FtpFileSystemObjectType.Directory) {
sb.Append("DIR ");
} else if (Type == FtpFileSystemObjectType.Link) {
sb.Append("LINK");
}
sb.Append(" ");
sb.Append(Name);
if (Type == FtpFileSystemObjectType.File) {
sb.Append(" ");
sb.Append("(");
sb.Append(Size.FileSizeToString());
sb.Append(")");
}
if (Created != DateTime.MinValue) {
sb.Append(" ");
sb.Append("Created : ");
sb.Append(Created.ToString());
}
if (Modified != DateTime.MinValue) {
sb.Append(" ");
sb.Append("Modified : ");
sb.Append(Modified.ToString());
}
return sb.ToString();
}
}
}