7

このリストを読んでいる私と他のすべての人は、オンラインディレクトリからリストビューまでのすべてのファイルをどのようにリストできますか?

これは、リストされるローカルディレクトリのコードです。FTPWebサイトに接続してファイルをリストするようにする方法があったかどうか知りたいですか?

FolderBrowserDialog folderPicker = new FolderBrowserDialog();
if (folderPicker.ShowDialog() == DialogResult.OK)
{

    ListView1.Items.Clear();

    string[] files = Directory.GetFiles(folderPicker.SelectedPath);
    foreach (string file in files)
    {

        string fileName = Path.GetFileNameWithoutExtension(file);
        ListViewItem item = new ListViewItem(fileName);
        item.Tag = file;

        ListView1.Items.Add(item);

    }

}

私はこのコードを使用しましたが、エラーが発生しないのにWebサーバーにファイルがリストされていないので、動作させることができないようです。

private void ConnectBtn_Click(object sender, EventArgs e)
    {
        ListDirectory();
    }

    public string[] ListDirectory()
    {
        var list = new List<string>();

        var request = createRequest(TxtServer.Text, WebRequestMethods.Ftp.ListDirectory);

        using (var response = (FtpWebResponse)request.GetResponse())
        {
            using (var stream = response.GetResponseStream())
            {
                using (var reader = new StreamReader(stream, true))
                {
                    while (!reader.EndOfStream)
                    {
                        list.Add(reader.ReadLine());
                    }
                }
            }
        }

        return list.ToArray();
    }

    private FtpWebRequest createRequest(string uri, string method)
    {
        var r = (FtpWebRequest)WebRequest.Create(uri);

        r.Credentials = new NetworkCredential(TxtUsername.Text, TxtPassword.Text);
        r.Method = method;

        return r;
    }
4

5 に答える 5

12

このラッパーライブラリを使用できます。

関連するコードは次のとおりです。

    public string[] ListDirectory() {
        var list = new List<string>();

        var request = createRequest(WebRequestMethods.Ftp.ListDirectory);

        using (var response = (FtpWebResponse)request.GetResponse()) {
            using (var stream = response.GetResponseStream()) {
                using (var reader = new StreamReader(stream, true)) {
                    while (!reader.EndOfStream) {
                        list.Add(reader.ReadLine());
                    }
                }
            }
        }

        return list.ToArray();
    }
于 2012-12-17T22:28:37.600 に答える
11

FTPディレクトリのすべてのファイルとフォルダを取得するための優れたヘルパーは次のとおりです。

public static IEnumerable<string> GetFilesInFtpDirectory(string url, string username, string password)
{
    // Get the object used to communicate with the server.
    var request = (FtpWebRequest)WebRequest.Create(url);
    request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
    request.Credentials = new NetworkCredential(username,password);

    using (var response = (FtpWebResponse) request.GetResponse())
    {
        using (var responseStream = response.GetResponseStream())
        {
            var reader = new StreamReader(responseStream);
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                if (string.IsNullOrWhiteSpace(line) == false)
                {
                    yield return line.Split(new[] { ' ', '\t' }).Last();    
                }
            }
        }
    }
}

ここにあります:http ://www.snippetsource.net/Snippet/128/get-all-files-of-an-ftp-directory-in-c

于 2014-07-11T15:53:24.150 に答える
2

少し実験して答えを見つけました。リストビューにファイルが表示されます。ありがとうRobertHarvey♦</p>

private void ConnectBtn_Click(object sender, EventArgs e)
    {
        ListDirectory();
    }

    public string[] ListDirectory()
    {
        var list = listView1;

        var request = createRequest(TxtServer.Text, WebRequestMethods.Ftp.ListDirectory);

        using (var response = (FtpWebResponse)request.GetResponse())
        {
            using (var stream = response.GetResponseStream())
            {
                using (var reader = new StreamReader(stream, true))
                {
                    while (!reader.EndOfStream)
                    {
                        list.Items.Add(reader.ReadLine());
                    }
                }
            }
        } List<string> l = new List<string>();
        return l.ToArray();
    }

    private FtpWebRequest createRequest(string uri, string method)
    {
        var r = (FtpWebRequest)WebRequest.Create(uri);

        r.Credentials = new NetworkCredential(TxtUsername.Text, TxtPassword.Text);
        r.Method = method;

        return r;
    }
于 2012-12-17T23:07:26.727 に答える
1

このコードは、ftpからファイルのリストを取得するために使用できます

private void ftpFileRead()
{
  FtpWebRequest Request = (FtpWebRequest)WebRequest.Create("your ftpAddress");
  Request.Method = WebRequestMethods.Ftp.ListDirectory;     
  Request.Credentials = new NetworkCredential(your ftp username,your ftp password);
  FtpWebResponse Response = (FtpWebResponse)Request.GetResponse();
  Stream ResponseStream = Response.GetResponseStream();
  StreamReader Reader = new StreamReader(ResponseStream);

  ListBox1.Items.Add(Response.WelcomeMessage);
  while (!Reader.EndOfStream)//Read file name   
  {
    ListBox1.Items.Add(Reader.ReadLine().ToString());
  }
  Response.Close();
  ResponseStream.Close();
  Reader.Close();
}
于 2013-09-28T11:17:44.200 に答える
0

この方法を使用できます。

    public static string[] GetFiles(string path, NetworkCredential Credentials, SearchOption searchOption)
    {
        var request = (FtpWebRequest)WebRequest.Create(path);
        request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
        request.Credentials = Credentials;
        List<string> files = new List<string>();
        using (var response = (FtpWebResponse)request.GetResponse())
        {
            using (var responseStream = response.GetResponseStream())
            {
                var reader = new System.IO.StreamReader(responseStream);
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    if (string.IsNullOrWhiteSpace(line) == false)
                    {
                        if (!line.Contains("<DIR>"))
                        {
                            string[] details = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                            string file = line.Replace(details[0], "")
                                .Replace(details[1], "")
                                .Replace(details[2], "")
                                .Trim();
                            files.Add(file);
                        }
                        else
                        {
                            if (searchOption == SearchOption.AllDirectories)
                            {
                                string dirName = line.Split(
                                        new string[] { "<DIR>" },
                                        StringSplitOptions.RemoveEmptyEntries
                                        ).Last().Trim();
                                string dirFullName = String.Format("{0}/{1}", path.Trim('/'), dirName);
                                files.AddRange(GetFiles(dirFullName, Credentials, searchOption));
                            }
                        }
                    }
                }
            }
        }
        return files.ToArray();
    }
于 2016-12-06T07:24:21.240 に答える