powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / скачивание файлов с ftp с одним подключением
6 сообщений из 6, страница 1 из 1
скачивание файлов с ftp с одним подключением
    #38170753
Saules
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня,
есть прога(писалось не мной), которая должна подключится к фтп один раз в сутки и скачать оттуда те файлы, которые еще не были скачаны. Сейчас обнаружилась проблема в том, что к каждому файлу осуществляется по 3-4 подключения, а файлов около 5 тысяч. Лог переполняется и админы обрубили доступ. реально ли сделать одно глобальное подключение, которое потом будет использоватся в 3х функциях? т.е. коннект-проверили есть ли такой файл-скачали-проверили следующий и так до конца и потом дисконнект? сейчас, насколько понимаю, происходит так: коннект-проверили есть ли такой файл-дисконнект-коннект-скачали-дисконнект и т.д.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
public bool DisplayFile(Uri serverUri)
		{
			FtpWebRequest networkCredential;
			WebResponse response;
			string str;
			WebException webException;
			bool flag;
			this.g_host = Directory.GetCurrentDirectory();
      
			string[] strArrays = new string[300];
			int num = 0;
			int num1 = 0;
			int num2 = 0;
			bool scheme = !(serverUri.Scheme != Uri.UriSchemeFtp);
			if (scheme)
			{
                string str1 = "ftp://test/";
				try
				{                     
					Uri uri = new Uri(str1);
					networkCredential = (FtpWebRequest)WebRequest.Create(uri);
                                        networkCredential.Credentials = new NetworkCredential("login", "pass");
					networkCredential.Method = "NLST";
					networkCredential.KeepAlive = true;
                                        networkCredential.ConnectionGroupName = "Name";
					response = networkCredential.GetResponse();
					StreamReader streamReader = new StreamReader(response.GetResponseStream());
					str = streamReader.ReadLine();
					while (true)
					{
						scheme = str != null;
						if (!scheme)
						{
							break;
						}
						strArrays[num] = str;
						scheme = Directory.Exists(string.Concat(Directory.GetCurrentDirectory(), "\\", str));
						if (!scheme)
						{
							Directory.CreateDirectory(string.Concat(Directory.GetCurrentDirectory(), "\\", str));
						}
						num++;
						str = streamReader.ReadLine();
					}
					response.Close();
					streamReader.Close();
				}
				catch (WebException webException1)
				{
					webException = webException1;
					MessageBox.Show(string.Concat("error: ", webException.Message));
				}
				string[] strArrays1 = strArrays;
				int num3 = 0;
				while (true)
				{
					scheme = num3 < (int)strArrays1.Length;
					if (!scheme)
					{
						break;
					}
					str = strArrays1[num3];
					scheme = str != null;
					if (scheme)
					{
                        string str2 = string.Concat("ftp://test/", str, "/");
						Uri uri1 = new Uri(str2);
						networkCredential = (FtpWebRequest)WebRequest.Create(uri1);
                                                networkCredential.Credentials =  new NetworkCredential("login", "pass");
						networkCredential.Method = "NLST";
						networkCredential.KeepAlive = true;
                                                networkCredential.ConnectionGroupName = "Name";
						response = networkCredential.GetResponse();
						StreamReader streamReader1 = new StreamReader(response.GetResponseStream());
						string str3 = streamReader1.ReadLine();
						this.listView1.BeginUpdate();
						while (true)
						{
							scheme = str3 != null;
							if (!scheme)
							{
								break;
							}
							Form1.FILE_ENTRY fileSize = new Form1.FILE_ENTRY();
							fileSize.filename = str3;
							fileSize.filesize = this.GetFileSize(str, fileSize.filename, networkCredential);
							num1++;
							ListViewItem listViewItem = new ListViewItem(num1.ToString());
							listViewItem.SubItems.Add(fileSize.filesize);
							listViewItem.SubItems.Add(fileSize.filename);
							listViewItem.SubItems.Add("");
							this.listView1.Items.Add(listViewItem);
							this.listView1.EnsureVisible(this.listView1.Items.Count - 1);
							this.listView1.EndUpdate();
							this.listView1.Refresh();
							string str4 = string.Concat(str2, fileSize.filename);
							int num4 = this.NameExists(fileSize.filename);
							scheme = num4 != -1;
							if (scheme)
							{
								scheme = !(this.listView2.Items[num4].SubItems[1].Text != this.listView1.Items[(this.listView1.Items.Count - 1)].SubItems[1].Text);
								if (!scheme)
								{
									num2 = 1;
								}
							}
							else
							{
								num2 = 1;
							}
							scheme = num2 != 1;
							if (scheme)
							{
								this.listView1.Items[this.listView1.Items.Count - 1].SubItems[3].Text = "Exist";
							}
							else
							{
								try
								{
									Directory.SetCurrentDirectory(string.Concat(this.g_host, "\\", str));
									this.Download(str2, fileSize.filename);
								}
								catch (WebException webException2)
								{
									webException = webException2;
									MessageBox.Show(string.Concat("Downloading file error: ", webException.Message));
								}
								this.listView1.Items[this.listView1.Items.Count - 1].SubItems[3].Text = "Downloaded";
							}
							num2 = 0;
							str3 = streamReader1.ReadLine();
						}
						streamReader1.Close();
						response.Close();
						this.listView1.EndUpdate();
						num3++;
					}
					else
					{
						break;
					}
				}
				flag = true;
			}
			else
			{
				flag = false;
			}
			return flag;
		}

		
		private void Download(string filePath, string fileName)
		{
			try
			{
				FileStream fileStream = new FileStream(fileName, FileMode.Create);
				FtpWebRequest networkCredential = (FtpWebRequest)WebRequest.Create(new Uri(string.Concat(filePath, fileName)));
				networkCredential.Method = "RETR";
				networkCredential.UseBinary = true;
				networkCredential.KeepAlive = true;
                                networkCredential.ConnectionGroupName = "Name";
                                networkCredential.Credentials =  new NetworkCredential("login", "pass");
				FtpWebResponse response = (FtpWebResponse)networkCredential.GetResponse();
				Stream responseStream = response.GetResponseStream();
				long contentLength = response.ContentLength;
				int num = 2048;
				byte[] numArray = new byte[num];
				int num1 = responseStream.Read(numArray, 0, num);
				while (true)
				{
					bool flag = num1 > 0;
					if (!flag)
					{
						break;
					}
					fileStream.Write(numArray, 0, num1);
					num1 = responseStream.Read(numArray, 0, num);
				}
				responseStream.Close();
				fileStream.Close();
				response.Close();
			}
			catch (Exception exception1)
			{
				Exception exception = exception1;
				MessageBox.Show(exception.Message);
			}
		}

		private string GetFileSize(string str, string filename, FtpWebRequest fwr)
		{
			string str1 = "0";
                        string str2 = string.Concat("ftp://test/", str, "/", filename);
			try
			{
				Uri uri = new Uri(str2);
				fwr = (FtpWebRequest)WebRequest.Create(uri);
				fwr.UseBinary = true;
				fwr.Credentials = new NetworkCredential("login", "pass");
				fwr.Method = "SIZE";
				fwr.KeepAlive = true;
                                fwr.ConnectionGroupName = "Name";
				WebResponse response = fwr.GetResponse();
				long contentLength = response.ContentLength;
				str1 = contentLength.ToString();
				response.Close();
			}
			catch (Exception exception1)
			{
				Exception exception = exception1;
				this.label1.Text = string.Concat("error: ", exception.Message);
			}
			string str3 = str1;
			return str3;
		}


спасибо!
...
Рейтинг: 0 / 0
скачивание файлов с ftp с одним подключением
    #38170885
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Saules,

почему не используешь using?
...
Рейтинг: 0 / 0
скачивание файлов с ftp с одним подключением
    #38170925
Saules
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это что? можно ссылку с примером как использовать?
извиняюсь за глупые вопросы, но я полный ноль в этом, а сделать надо
...
Рейтинг: 0 / 0
скачивание файлов с ftp с одним подключением
    #38170947
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в качестве примера: StreamReader - класс

Код: c#
1.
2.
using (StreamReader sr = new StreamReader("TestFile.txt"))
...
...
Рейтинг: 0 / 0
скачивание файлов с ftp с одним подключением
    #38170955
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оператор using (Справочник по C#)

Предоставляет удобный синтаксис, обеспечивающий правильное использование объектов IDisposable.
...
Рейтинг: 0 / 0
скачивание файлов с ftp с одним подключением
    #38170959
Saules
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пока начал делать так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
   private FtpWebRequest Request(string url)  
        {
                    string str1 = "ftp://test/";			                 
					Uri uri = new Uri(str1);
                    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
                    request.Credentials = new NetworkCredential("login", "pass");
                    request.Method = "NLST";
                    request.KeepAlive = true;
                    request.ConnectionGroupName = "Name";
                    return request;
        }

public bool DisplayFile(Uri serverUri)
		{
			string str;
			WebException webException;
			bool flag;
			this.g_host = Directory.GetCurrentDirectory();
      
			string[] strArrays = new string[300];
			int num = 0;
			int num1 = 0;
			int num2 = 0;
			bool scheme = !(serverUri.Scheme != Uri.UriSchemeFtp);
			if (scheme)
			{
				try
				{
                    FtpWebRequest request = Request(url);
                    WebResponse response = request.GetResponse();
                    StreamReader streamReader = new StreamReader(response.GetResponseStream());
					str = streamReader.ReadLine();
					while (true)
					{


значит двигался в неправильном направлении?
Владимир СА , спасибо! сейчас буду читать
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / скачивание файлов с ftp с одним подключением
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]