के माध्यम से सभी फाइलें और उप-निर्देशिकाएं डाउनलोड करें सामान्य जानकारी
मैं अभी भी सी # सीखने की प्रक्रिया में हूं। मेरी मदद करने के लिए, मैं एक ऐसा प्रोग्राम बनाने की कोशिश कर रहा हूं जो मेरे सभी स्थानीय प्रोजेक्ट को स्वचालित रूप से मेरे एफ़टीपी सर्वर पर एक फ़ोल्डर के साथ सिंक्रनाइज़ कर देगा। ऐसा इसलिए है कि मैं स्कूल या घर पर हूं, मेरे पास हमेशा एक ही परियोजनाएं उपलब्ध हैं।सी # एफ़टीपी
मुझे पता है कि ड्रॉपबॉक्स जैसे प्रोग्राम हैं जो पहले से ही मेरे लिए ऐसा करते हैं, लेकिन मुझे लगता है कि ऐसा कुछ बनाने के लिए मुझे रास्ते में बहुत कुछ सिखाया जाएगा।
समस्या
मेरा लक्ष्य की दिशा में मेरा पहला कदम बस मेरी FTP सर्वर से सभी फाइलों को, उपनिर्देशिकाएं और subfiles डाउनलोड करने के लिए किया गया था। मैंने नीचे दिए गए कोड के साथ निर्देशिका से सभी फाइलें डाउनलोड करने में कामयाब रहे हैं। हालांकि, मेरा कोड केवल मुख्य नाम में फ़ोल्डर नाम और फ़ाइलों को सूचीबद्ध करता है। Subfolders और subfiles कभी वापस नहीं आते हैं और कभी डाउनलोड नहीं किया जाता है। इसके अलावा, सर्वर 550 त्रुटि देता है क्योंकि मैं फ़ोल्डरों को डाउनलोड करने की कोशिश कर रहा हूं जैसे कि वे फ़ाइलें हैं। मैं इस पर 4+ घंटों के लिए रहा हूं, लेकिन मुझे इन समस्याओं को ठीक करने और इसे काम करने के तरीके पर कुछ भी नहीं मिला है। वजह मैं तुम लोगों ने मुझे बाहर करने में मदद करेगा :)
कोड आशा करती हूं कि
public string[] GetFileList()
{
string[] downloadFiles;
StringBuilder result = new StringBuilder();
WebResponse response = null;
StreamReader reader = null;
try
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential(ftpUserName, ftpPassWord);
request.KeepAlive = false;
request.UsePassive = false;
response = request.GetResponse();
reader = new StreamReader(response.GetResponseStream());
string line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("\n");
line = reader.ReadLine();
}
result.Remove(result.ToString().LastIndexOf('\n'), 1);
return result.ToString().Split('\n');
}
catch (Exception ex)
{
if (reader != null)
{
reader.Close();
}
if (response != null)
{
response.Close();
}
downloadFiles = null;
return downloadFiles;
}
}
private void Download(string file)
{
try
{
string uri = url + "/" + file;
Uri serverUri = new Uri(uri);
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
return;
}
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url + "/" + file);
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(ftpUserName, ftpPassWord);
request.KeepAlive = false;
request.UsePassive = false;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
FileStream writeStream = new FileStream(localDestnDir + "\\" + file, FileMode.Create);
int Length = 2048;
Byte[] buffer = new Byte[Length];
int bytesRead = responseStream.Read(buffer, 0, Length);
while (bytesRead > 0)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = responseStream.Read(buffer, 0, Length);
}
writeStream.Close();
response.Close();
}
catch (WebException wEx)
{
MessageBox.Show(wEx.Message, "Download Error");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Download Error");
}
}
मैं स्वीकार किए जाते हैं जवाब देने के लिए अपने जवाब बदल दिया है के रूप में मैं यह से बहुत कुछ सीखा है और सभी efford के लिए आप इसे में डाल दिया गया है! एक बार फिर धन्यवाद! – icecub
हाय वहाँ मैं आपकी लाइब्रेरी का उपयोग करने की कोशिश कर रहा हूं लेकिन मुझे अपने कनेक्शन पर एसएसएल/टीएलएस की आवश्यकता है, मैं इसे सक्षम FTPsquest के माध्यम से सक्षम कर रहा हूं EnableSsl = true का उपयोग करके यह आपके सत्र विकल्पों में सेट किया जा सकता है? – Jay
मैं इसे क्रमशः निष्क्रिय और स्पष्ट करने के लिए FtpMode और FTPSecure को सेट करके कनेक्ट करने में सक्षम था, महान लाइब्रेरी रिकर्सिव फीचर उत्कृष्ट है, एक सवाल यह है कि एक ऐसी सुविधा है जो फाइलों को पकड़ लेती है जो नए फ़ोल्डर में मौजूद नहीं है, इसलिए अनिवार्य रूप से केवल नए हथियार फाइलें जिन्हें पहले ही कॉपी किया गया है – Jay