Wie erstelle ich ein Verzeichnis auf dem FTP-Server unter Verwendung von C #?
Frage
Was ist eine einfache Möglichkeit, ein Verzeichnis auf einem FTP-Server unter Verwendung von C # zu erstellen?
ich herausgefunden, wie eine Datei zu einem bereits vorhandenen Ordner wie folgt laden:
using (WebClient webClient = new WebClient())
{
string filePath = "d:/users/abrien/file.txt";
webClient.UploadFile("ftp://10.128.101.78/users/file.txt", filePath);
}
Wenn ich jedoch auf users/abrien
hochladen möchten, erhalte ich eine WebException
, dass die Datei nicht verfügbar ist. Ich nehme an, das liegt daran, dass ich die neuen Ordner erstellen muß, bevor meine Datei hochladen, aber WebClient
scheint keine Verfahren zu haben, das zu erreichen.
Lösung
Verwenden Sie FtpWebRequest
, mit einem Verfahren zur WebRequestMethods.Ftp.MakeDirectory
.
Zum Beispiel:
using System;
using System.Net;
class Test
{
static void Main()
{
WebRequest request = WebRequest.Create("ftp://host.com/directory");
request.Method = WebRequestMethods.Ftp.MakeDirectory;
request.Credentials = new NetworkCredential("user", "pass");
using (var resp = (FtpWebResponse) request.GetResponse())
{
Console.WriteLine(resp.StatusCode);
}
}
}
Andere Tipps
Hier ist die Antwort, wenn Sie verschachtelte Verzeichnisse erstellen möchten
Es gibt keine saubere Art und Weise, wenn ein Ordner auf dem FTP existieren zu überprüfen, so dass Sie eine Schleife haben und erstellen alle die verschachtelte Struktur einen Ordner zum Zeitpunkt
public static void MakeFTPDir(string ftpAddress, string pathToCreate, string login, string password, byte[] fileContents, string ftpProxy = null)
{
FtpWebRequest reqFTP = null;
Stream ftpStream = null;
string[] subDirs = pathToCreate.Split('/');
string currentDir = string.Format("ftp://{0}", ftpAddress);
foreach (string subDir in subDirs)
{
try
{
currentDir = currentDir + "/" + subDir;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(currentDir);
reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(login, password);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
ftpStream = response.GetResponseStream();
ftpStream.Close();
response.Close();
}
catch (Exception ex)
{
//directory already exist I know that is weak but there is no way to check if a folder exist on ftp...
}
}
}
So etwas wie folgt aus:
// remoteUri points out an ftp address ("ftp://server/thefoldertocreate")
WebRequest request = WebRequest.Create(remoteUri);
request.Method = WebRequestMethods.Ftp.MakeDirectory;
WebResponse response = request.GetResponse();
(ein bisschen spät., Wie seltsam.)
ein FTP-Verzeichnis erstellen kann kompliziert sein, da Sie überprüfen, ob der Zielordner vorhanden ist oder nicht. Möglicherweise müssen Sie eine FTP-Bibliothek verwenden, um ein Verzeichnis zu überprüfen und zu erstellen. Sie können an diesem einen Blick: http://www.componentpro.com/ftp.net/ und dieses Beispiel: http: // www. componentpro.com/doc/ftp/Creating-a-new-directory-Synchronously.htm