将"DirectoryInfo"与 FTP 服务器配合使用



我会使用这样的指令:

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.1DocXML");`
IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories);

恐怕不行。

试试这个:

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()))
{
...
}

如果你需要关于FTP目录中文件的结构化信息,你必须使用第三方库。. net框架不提供这样的功能。

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


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

例如使用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目录中最老的文件。参见:

  • 从FTP服务器下载最新文件(c#)
  • 下载最新的文件(PowerShell,但很容易转换为c#)

都是针对最新的,而不是最老的文件。只需将c#代码中的.OrderByDescending替换为.Order即可获得最旧的文件。

(我是WinSCP的作者)

不能这样工作。我建议使用SFTP而不是FTP。为此,我使用第三方库"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 ();

最新更新