我会使用这样的指令:
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 ();