1

我会使用这个指令:

System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("ftp://192.168.47.1/DocXML");

但我不能。

我该如何("ftp://192.168.47.1/DocXML");使用new System.IO.DirectoryInfo("");

这是代码

System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(@"\\192.168.47.1\DocXML");`

IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
4

3 回答 3

1

恐怕你不能。

试试这个:

FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp://192.168.47.1/DocXML");
req.Credentials = new NetworkCredential("foo", "foo@foo.com");
req.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse res = (FtpWebResponse)req.GetResponse();
using (StreamReader streamReader = new StreamReader(res.GetResponseStream()))
{
...
}
于 2015-05-16T15:40:20.343 回答
1

如果您需要有关 FTP 目录中文件的结构化信息,则必须使用 3rd 方库。.NET 框架不提供此类功能。

特别是因为它不支持MLSDFTP 命令,所以检索远程文件及其属性的机器可读列表的唯一可靠方法是什么。


有许多第三方库允许这样做。

例如使用WinSCP .NET 程序集

// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Ftp,
    HostName = "example.com",
    UserName = "username",
    Password = "password",
};

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Get list of files in the directory
    string remotePath = "/remote/path/";
    RemoteDirectoryInfo directoryInfo = session.ListDirectory(remotePath);

    foreach (RemoteFileInfo fileInfo in directoryInfo.Files)
    {
        Console.WriteLine("{0} with size {1}, permissions {2} and last modification at {3}",
            fileInfo.Name, fileInfo.Length, fileInfo.FilePermissions,
            fileInfo.LastWriteTime);
    }
}

参考资料:
https ://winscp.net/eng/docs/library_session_listdirectory
https://winscp.net/eng/docs/library_remotefileinfo

根据您的评论其他问题,您似乎实际上需要检索 FTP 目录中最旧的文件。为此,请参阅:

两者都是最新的,而不是最旧的文件。只需将 C# 代码中的 替换为.OrderByDescending即可.Order获取最旧的文件。

(我是WinSCP的作者)

于 2015-05-18T06:44:19.263 回答
0

不以这种方式工作。我建议使用 SFTP 而不是 FTP。为此,我正在使用第 3 方库“SharpSSH”。以下示例似乎有效:

using System.IO;
using Tamir.SharpSsh;
using Tamir.SharpSsh.jsch;

string ip = "DestinationIp";
string user = "JohnDoe";
string password = "YourPassword";
Sftp sftp = new Tamir.SharpSsh.Sftp(ip, user, password);
sftp.Connect();

FileInfo yourFileInfo = new FileInfo("path");

还可以使用 sftp.AddIdentityFile(); 添加主键;

于 2016-02-25T10:22:14.563 回答