Hei zusammen...
Ich möchte gerne alle Dateien, welche für einen Ftp benutzer existieren downloaden und in einen Ordner specihern meiner Wahl.
Hier mein code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
namespace Party_FiendsDevelopement
{
public partial class Logon : Form
{
public Logon()
{
InitializeComponent();
}
private void btnChose_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderDlg = new FolderBrowserDialog();
folderDlg.ShowNewFolderButton = true;
// Show the FolderBrowserDialog.
DialogResult result = folderDlg.ShowDialog();
if (result == DialogResult.OK)
{
txtPath.Text = folderDlg.SelectedPath;
Environment.SpecialFolder root = folderDlg.RootFolder;
}
}
//FTP
private class FtpData
{
public string RequestUriString;
public string FileName;
public DirectoryInfo Directory;
public int DownloadAttemps;
public FtpData(string requestUriString, string fileName, DirectoryInfo directory)
{
RequestUriString = requestUriString;
FileName = fileName;
Directory = directory;
DownloadAttemps = 0;
}
}
private List<FtpData> GetFilesAndDirectoriesToDownload(string requestUriString, DirectoryInfo workingDirectory, bool recursive)
{
List<FtpData> files = new List<FtpData>();
List<FtpData> directories = new List<FtpData>();
try
{
FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(requestUriString);
req.Proxy = new WebProxy();
req.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
req.KeepAlive = false;
using (FtpWebResponse response = (FtpWebResponse)req.GetResponse())
{
using (Stream dataStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(dataStream))
{
while (!reader.EndOfStream)
{
string entry = reader.ReadLine();
if (entry.StartsWith("d"))
{
string directoryName = GetEntryName(entry);
if (directoryName != "." && directoryName != ".." && recursive)
{
DirectoryInfo subDir = Directory.CreateDirectory(workingDirectory.FullName + "\\" + directoryName);
directories.Add(new FtpData(requestUriString + "/" + directoryName, "", subDir));
}
}
else
{
files.Add(new FtpData(requestUriString + "/" + GetEntryName(entry), GetEntryName(entry), workingDirectory));
}
}
}
}
}
foreach (FtpData dir in directories)
{
files.AddRange(GetFilesAndDirectoriesToDownload(dir.RequestUriString, dir.Directory, true));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return files;
}
void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
FtpData file = (FtpData)e.UserState;
if (e.Error == null)
{
try
{
File.WriteAllBytes(file.Directory.FullName + @"\" + file.FileName, e.Result);
pbDownloadProgress.Value += 1;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
else
{
if (file.DownloadAttemps <= 3)
DownloadFileAsynchron(file);
else
MessageBox.Show("File " + file.FileName + " konnte nicht heruntergeladen werden.");
}
}
private string GetEntryName(string entry)
{
string result = entry.Substring(entry.LastIndexOf(":"));
result = result.Substring(result.IndexOf(" ") + 1);
return result;
}
private void bnStartDownload_Click(object sender, EventArgs e)
{
lblStatus.Text = "Hole Dateien von FTP";
Application.DoEvents();
List<FtpData> filesToDownload = GetFilesAndDirectoriesToDownload("ftp://user:password@ftp-web.funpic.de", new DirectoryInfo(@"C:\Users\Max"), true);
lblStatus.Text = "Hole Dateien von FTP fertig";
Application.DoEvents();
System.Threading.Thread.Sleep(2000);
lblStatus.Text = "Starte Asynchroner Download von " + filesToDownload.Count.ToString() + " Dateien";
pbDownloadProgress.Maximum = filesToDownload.Count;
pbDownloadProgress.Value = 0;
foreach (FtpData file in filesToDownload)
{
DownloadFileAsynchron(file);
}
}
private void DownloadFileAsynchron(FtpData file)
{
using (WebClient wc = new WebClient())
{
wc.Proxy = new WebProxy();
wc.DownloadDataCompleted += new DownloadDataCompletedEventHandler(wc_DownloadDataCompleted);
file.DownloadAttemps += 1;
wc.DownloadDataAsync(new Uri(file.RequestUriString), file);
}
}
}
}
Wiso funktioniert das nicht ?
Was funktioniert nicht? Was erwartest Du? Was passiert?
Guck dir mal das hier an: [Hinweis] Wie poste ich richtig? (interessant für dich sind 1.1.1, 4a, 4.1 und 5)
Was funktioniert nicht? Was erwartest Du? Was passiert?
ich erwarte , dass es mir alle ordner von dem FTP server downloadet,
es funktioniert nichts
es passiert nichts
Also mal ganz ehrlich,
ein bischen Mitarbeit erwarten wir schon.. Setz Dich mit dem Debuggen ausseinander, und finde herraus ab wann dein Code nicht mehr das tut was Du erwartest. Dann denke noch einmal nach, ob Du Dir deine Frage nicht schon selbst beantworten kannst.
Wenn es dann immer noch nicht klappt kannst Du mit einer etwas spezielleren Frage nochmals nachhaken.
Gruß
Also mal ganz ehrlich,
ein bischen Mitarbeit erwarten wir schon.. Setz Dich mit dem Debuggen ausseinander, und finde herraus ab wann dein Code nicht mehr das tut was Du erwartest. Dann denke noch einmal nach, ob Du Dir deine Frage nicht schon selbst beantworten kannst.
Wenn es dann immer noch nicht klappt kannst Du mit einer etwas spezielleren Frage nochmals nachhaken.Gruß
hat sich geklärt, das tutorial war nicht so das ware....
Für Personen die nach genau dem suchen will ich noch eine Hilfe anbieten:
so hat es geklapppt:
string[] names = new string[256];
string[] filenames = new string[256];
private void btnOpen_Click(object sender, EventArgs e)
{
OpenFileDialog OFD = new OpenFileDialog();
OFD.Multiselect = true;
if (OFD.ShowDialog() == DialogResult.OK)
{
if (OFD.FileNames.Length > 0)
{
filenames = OFD.FileNames;
names = OFD.SafeFileNames;
int i = 0;
foreach (string values in filenames)
{
txtPath.Text = txtPath.Text + ';' + filenames[i];
i++;
}
}
}
}
private void btnUpload_Click(object sender, EventArgs e)
{
try
{
string links = txtPath.Text;
string[] splitlinks = links.Split(new Char[] {';'});
int i = 0;
foreach (string values in splitlinks)
{
string ftpname = txtPathFTP.Text + "/" + names[i];
WebClient Client = new WebClient();
Client.Credentials = new NetworkCredential(txtUser.Text, txtPassword.Text);
Client.UploadFile(ftpname, splitlinks[i]);
i++;
}
}
catch
{
MessageBox.Show("falsche Daten");
}
}
Hoffe das hilft 😃
Hmm, erst möchtest du alle Dateien runterladen und in deinem "funktionierenden" Beispiel sprichst du vom Upload.
Ich hab schon einiges an FTP Unterstützung in meine Software implementiert und kann dir bei genauerer Fragestellung behilflich sein.
Viel Erfolg weiterhin!