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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top