كيف أقوم بإنشاء دليل على خادم FTP باستخدام C#؟

StackOverflow https://stackoverflow.com/questions/860638

  •  21-08-2019
  •  | 
  •  

سؤال

ما هي الطريقة السهلة لإنشاء دليل على خادم FTP باستخدام C#؟

لقد اكتشفت كيفية تحميل ملف إلى مجلد موجود بالفعل مثل هذا:

using (WebClient webClient = new WebClient())
{
    string filePath = "d:/users/abrien/file.txt";
    webClient.UploadFile("ftp://10.128.101.78/users/file.txt", filePath);
}

ومع ذلك، إذا كنت أرغب في التحميل على users/abrien, ، أحصل على WebException يقول الملف غير متوفرأفترض أن السبب في ذلك هو أنني بحاجة إلى إنشاء المجلد الجديد قبل تحميل الملف الخاص بي، ولكن WebClient لا يبدو أن لديها أي طرق لتحقيق ذلك.

هل كانت مفيدة؟

المحلول

استخدم FtpWebRequest، مع طريقة WebRequestMethods.Ftp.MakeDirectory .

وعلى سبيل المثال:

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);
        }
    }
}

نصائح أخرى

وهنا هو الجواب إذا كنت ترغب في إنشاء الدلائل المتداخلة

وليس هناك طريقة نظيفة لمعرفة ما اذا كان مجلد موجود على بروتوكول نقل الملفات ولذلك عليك أن حلقة وخلق كل بنية متداخلة مجلد واحد في الوقت

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...
            }
        }
    }

وشيء من هذا القبيل:

// remoteUri points out an ftp address ("ftp://server/thefoldertocreate")
WebRequest request = WebRequest.Create(remoteUri);
request.Method = WebRequestMethods.Ftp.MakeDirectory;
WebResponse response = request.GetResponse();

و(متأخرا بعض الشيء. كيف الغريب).

قد يكون إنشاء دليل FTP أمرًا معقدًا حيث يتعين عليك التحقق مما إذا كان المجلد الوجهة موجودًا أم لا.قد تحتاج إلى استخدام مكتبة FTP للتحقق من الدليل وإنشائه.يمكنك إلقاء نظرة على هذا: http://www.componentpro.com/ftp.net/ وهذا المثال: http://www.componentpro.com/doc/ftp/Creating-a-new-directory-Synchronously.htm

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top