1
我正在使用Make目錄創建一個文件夾和子文件夾在我的FTP(使用filezilla)工作正常,但是當我嘗試在我的測試服務器(IIS FTP)工作,拋出550,文件沒有找到或沒有access.so只是一個快速的方式來改變代碼,以創建我的ftp服務器的子目錄工作正常,但我知道它是一種有點低劣的方式做到這一點。效率低下的方式來創建FTP子文件夾
改變基於@Markus
var dir = new ConsoleApplication5.Program();
string path = "ftp://1.1.1.1/testsvr01/times/" + "testfile" + "/svr01fileName";
string[] pathsplit = path.ToString().Split('/');
string Firstpath = pathsplit[0] + "/" + pathsplit[1] + "/" + pathsplit[2] + "/" + pathsplit[3] + "/";
string SecondPath = Firstpath + "/" + pathsplit[4] + "/";
string ThirdPath = SecondPath + "/" + pathsplit[5] + "/";
string[] paths = { Firstpath, SecondPath, ThirdPath };
foreach (string pat in paths)
{
bool result= dir.EnsureDirectoryExists(pat);
if (result==true)
{
//do nothing
}
else
{ //create dir
dir.createdir(pat);
}
}
upload(path,filename);
}
private bool EnsureDirectoryExists(string pat)
{
try
{
//call the method the first path is exist ?
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(pat);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential("sh", "se");
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
return true;
}
}
catch (Exception ex)
{ return false; }
}
public void createdir(string pat)
{
try
{
FtpWebRequest createdir = (FtpWebRequest)FtpWebRequest.Create(new Uri(pat));
createdir.Method = WebRequestMethods.Ftp.MakeDirectory;
createdir.Credentials = new NetworkCredential("sh", "se");
createdir.UsePassive = true;
createdir.UseBinary = true;
createdir.KeepAlive = false;
FtpWebResponse response1 = (FtpWebResponse)createdir.GetResponse();
Stream ftpStream1 = response1.GetResponseStream();
ftpStream1.Close();
response1.Close();
}
catch (Exception ex)
{
}
}
請我的代碼,如果任何的你們找到一個更好的辦法,建議我。
,感謝您的建議,不幸的是我不能創建目錄的方式你提到。即使ftp.makedirectory是兩行代碼來創建整個目錄,但如果你想創建在IIS FTP然後它不會讓你做在單行代碼中,您必須逐個創建每個目錄。 – Usher 2012-03-10 12:23:59
我正在逐個創建每個目錄(所以開始創建父目錄)。是的,它可能是兩行代碼,我只有一行代碼,但我相信它比通過您提出的try/catch塊更簡單。 – thoean 2012-03-10 15:10:19
,是的,我會減少大量的代碼,只是通過路徑創建一個一個。再次感謝您的幫助。 – Usher 2012-03-10 22:52:27