FTP и C#
От: INsideR Латвия  
Дата: 09.07.04 18:01
Оценка:
Как загрузить файл по FTP на C# не используя ASP.NET.
Мудр тот, кто знает не многое, а нужное
Re: FTP и C#
От: Lexey Россия  
Дата: 09.07.04 23:35
Оценка: :)
Здравствуйте, INsideR, Вы писали:

INR>Как загрузить файл по FTP на C# не используя ASP.NET.


А причем тут ASP.NET? В текущих фреймворках, AFAIK, вообще нет классов для работы с FTP.
Могу в принципе подарить враппер над WinInet, который я сваял около 3-х лет назад на MC++. Только сразу предупреждаю, что код там написан в матером сишном стиле (не было для меня в ту пору такого понятия, как code standard , практически лишен комментариев и содержит как минимум один небольшой глюк в работе с таймаутами.
Использование этого дела выглядит примерно так:
            FtpClient fc=new FtpClient();
            fc.Timeout=20000;
            fc.Connect("lexey","anonymous","lexey@isa.ru");
            FtpFileInfo []fi=fc.ListFiles("*.*",(uint)0xffffffff);
            for(int i=0;i<fi.Length;i++) Console.WriteLine("Name="+fi[i].FileName+" Size="+fi[i].FileSize);
            fi=fc.ListFiles("*.*",FtpFileType.FileTypeDirectory);
            for(int i=0;i<fi.Length;i++) Console.WriteLine("Name="+fi[i].FileName+" Size="+fi[i].FileSize);
Size="+fi[i].FileSize);
            fc.CreateDirectory("superdir");
            fc.SetCurrentDirectory("superdir");
            String s=fc.GetCurrentDirectory();
            Console.WriteLine(s);
            fc.SetCurrentDirectory("/");
            s=fc.GetCurrentDirectory();
            Console.WriteLine(s);
            fc.RemoveDirectory("superdir");
            fc.Timeout=60000;
            fc.PutFile("a.a","c:\\temp\\1.1");
            fc.Timeout=20000;
            fc.RenameFile("a.a","a.aaa");
            fc.Timeout=60000;
            fc.GetFile("a.aaa","c:\\temp\\a.aaa");
            fc.Timeout=20000;
            fi=fc.ListFiles("*.*",FtpFileType.FileTypeFile);
            for(int i=0;i<fi.Length;i++) Console.WriteLine("Name="+fi[i].FileName+" Size="+fi[i].FileSize);
            fc.DeleteFile("a.aaa");
            fc.Disconnect();
... << RSDN@Home 1.1.4 beta 1 >>
"Будь достоин победы" (c) 8th Wizard's rule.
Re[2]: FTP и C#
От: INsideR Латвия  
Дата: 10.07.04 08:24
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Здравствуйте, INsideR, Вы писали:


INR>>Как загрузить файл по FTP на C# не используя ASP.NET.


L>А причем тут ASP.NET? В текущих фреймворках, AFAIK, вообще нет классов для работы с FTP.

L>Могу в принципе подарить враппер над WinInet, который я сваял около 3-х лет назад на MC++. Только сразу предупреждаю, что код там написан в матером сишном стиле (не было для меня в ту пору такого понятия, как code standard , практически лишен комментариев и содержит как минимум один небольшой глюк в работе с таймаутами.

Спасибо, но вчера сам wrapper написал, теперь другая проблема, как подключаться к ftp через proxy?
Мудр тот, кто знает не многое, а нужное
Re[3]: FTP и C#
От: Lexey Россия  
Дата: 11.07.04 21:05
Оценка:
Здравствуйте, INsideR, Вы писали:

INR>Спасибо, но вчера сам wrapper написал, теперь другая проблема, как подключаться к ftp через proxy?


Ну если это враппер над WinInet, то WinInet, AFAIR, позволяет конфигурировать прокси. Кроме того, он по дефолту использует те же настройки, что и IE.
... << RSDN@Home 1.1.4 beta 1 >>
"Будь достоин победы" (c) 8th Wizard's rule.
Re[4]: FTP и C#
От: Аноним  
Дата: 12.07.04 06:40
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Ну если это враппер над WinInet, то WinInet, AFAIR, позволяет конфигурировать прокси. Кроме того, он по дефолту использует те же настройки, что и IE.


зачем писать класс-обертку если можно самому реализовать
простой FTP клиент на C#?!!!

Создаешь TCPClient на 21 порту:
TcpClient _tcpClient = new TcpClient(Host, 21);

Получаешь у него поток :
NetworkStream ns=_tcpClient.GetStream();

И дальше пишешь в поток (посылая FTP комманды) и
читаешь из потока ответ севера

Например для загрузки файла на сервер используется комманда "STOR"
Re: FTP и C#
От: TK Лес кывт.рф
Дата: 12.07.04 08:19
Оценка:
Hello, "INsideR"
> Как загрузить файл по FTP на C# не используя ASP.NET.

http://www.gotdotnet.com/community/usersamples/Default.aspx?query=FTP
Posted via RSDN NNTP Server 1.9 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[5]: FTP и C#
От: Lexey Россия  
Дата: 12.07.04 20:31
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>зачем писать класс-обертку если можно самому реализовать

А>простой FTP клиент на C#?!!!

Ну флаг тебе в руки, как говорится.

А>Создаешь TCPClient на 21 порту:

А>TcpClient _tcpClient = new TcpClient(Host, 21);

А>Получаешь у него поток :

А>NetworkStream ns=_tcpClient.GetStream();

А>И дальше пишешь в поток (посылая FTP комманды) и

А>читаешь из потока ответ севера

А>Например для загрузки файла на сервер используется комманда "STOR"


А ты в курсе, что протокол FTP двухпортовый? Причем работает по разному в номальном и пассивном режиме? И что кроме STOR и GET еще иногда хочется уметь получать списко файлов в каталоге, менять текущий каталог, etc. И неплохо бы, чтобы оно через прокси работало и асинхронный режим поддерживало.
... << RSDN@Home 1.1.4 beta 1 >>
"Будь достоин победы" (c) 8th Wizard's rule.
Re[5]: FTP и C#
От: TechnoMen  
Дата: 16.01.07 12:59
Оценка:
Подскажите как правильно принимать ответы на команды от FTP сервера.

Обычно это делают примерно так:


 int bytes = 0;
            do
            {
                try
                {
                    bytes = sData.Receive(buffer, buffer.Length, 0);
                }
                data.Append(enc.GetString(buffer, 0, bytes));
            } 
            while (bytes > 0);


Т.е. выход из цикла если bytes стало равно нулю, но видь это будет работать только с локальным сервером, т.к. в Инернете бывают задержки, вследствие которых из цикла будет происходить выход раньше чем надо.
Re[6]: FTP и C#
От: TechnoMen  
Дата: 16.01.07 13:06
Оценка:
Как узнать что FTP-сервер отослал все данные?
Видь размер сообщения не известен...
Re[7]: FTP и C#
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 17.01.07 07:01
Оценка:
Здравствуйте, TechnoMen, Вы писали:

TM>Как узнать что FTP-сервер отослал все данные?

TM>Видь размер сообщения не известен...

Функционирование протокола FTP определяется документом RFC
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.