powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / FTP через командную строку в C#
8 сообщений из 8, страница 1 из 1
FTP через командную строку в C#
    #38983111
z3r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем такая проблема не могу подключится через ftp используя командную строку в C#.

Обычные команды типа:
cd c:\
dir

Работают. Но вот подключение через ftp нет. Выполняю эти команды в итоге процесс зависает на ftp.
ftp
open us1.hostedftp.com
z3r9@ya.ru
123456
dir

Инициализация:

Код: c#
1.
2.
3.
Test test = new Test();
test.start();
Console.ReadKey();



Класс Test:

Код: 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.
class Test
    {    
        static StringBuilder StdOutput = new StringBuilder();
        Process p = null;
        Queue<string> cmdQueue = new Queue<string>();

        public void start(){

            cmdQueue = new Queue<string>();
            cmdQueue.Enqueue("cd c:\\");
            cmdQueue.Enqueue("dir");

            cmdQueue.Enqueue("ftp");
            cmdQueue.Enqueue("open us1.hostedftp.com");
            cmdQueue.Enqueue("z3r9@ya.ru");
            cmdQueue.Enqueue("123456");
            cmdQueue.Enqueue("dir");
            setupProcess();
            startProcess();    
        }

        private void setupProcess()
        {
            p = new Process();
            ProcessStartInfo info = new ProcessStartInfo();
            info.FileName = "cmd";
            info.CreateNoWindow = true;
            info.RedirectStandardOutput = true;
            info.RedirectStandardInput = true;
            info.UseShellExecute = false;

            p.OutputDataReceived += new DataReceivedEventHandler(OutputDataHandler);

            StdOutput = new StringBuilder();

            p.StartInfo = info;
        }

        private async void startProcess()
        {
            p.Start();    
            p.BeginOutputReadLine();                    

            using (StreamWriter sw = p.StandardInput)
            {

                if (sw.BaseStream.CanWrite)
                {
                    while (cmdQueue.Count > 0)
                    { 
                            string cmd = cmdQueue.Dequeue();

                            if (cmd != null & cmd != "")
                            {
                                await sw.WriteLineAsync(cmd);

                                Thread.Sleep(100);

                                //System.Console.WriteLine(StdOutput);
                            }
                            else
                            {
                                break;
                            }  
                    }

                    Console.WriteLine(StdOutput);    
                }                       
                p.WaitForExit();                    
            }
        }

        private static void OutputDataHandler(object sendingProcess, DataReceivedEventArgs outLine)
        {
            if (!String.IsNullOrEmpty(outLine.Data))
            {
                StdOutput.Append(Environment.NewLine + outLine.Data);    
                //System.Console.WriteLine(Environment.NewLine + outLine.Data);    
            }
        }
    }



Подскажите пожалуйста что я не так делаю.
...
Рейтинг: 0 / 0
FTP через командную строку в C#
    #38983115
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z3r9Подскажите пожалуйста что я не так делаю.
практически всё

если уж общаться через внешнего клиента - ftp стартовать нужно, а не cmd
в приведённом говнокоде делаестя попытка кормить cmd командами, предназначенными для ftp клмента

чем не устроил
https://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest(v=vs.110).aspx
...
Рейтинг: 0 / 0
FTP через командную строку в C#
    #38983119
z3r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил, нужно через командную строку. Не только ftp. Я пробовал стартовать ftp но тоже не пошло. Подскажите пожалуйста в чем проблема?
...
Рейтинг: 0 / 0
FTP через командную строку в C#
    #38983124
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z3r9,

Запускайте посредством CreateProcess - ftp.exe
...
Рейтинг: 0 / 0
FTP через командную строку в C#
    #38983135
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z3r9, на stackoverflow есть ответ . По всей видимости ftp.exe работает с консолью напрямую минуя потоки ввода/вывода. Соответственно нужно работать с консолью через функции WinAPI. Но правильнее будет использовать класс FtpWebRequest как уже посоветовал Изопропил.

z3r9нужно через командную строку
Почему? И если действительно нужно, то пробовал ли формировать список команд в виде файла и передавать его с помощью параметра -s: ?
...
Рейтинг: 0 / 0
FTP через командную строку в C#
    #38983149
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
z3r9В общем такая проблема не могу подключится через ftp используя командную строку в C#.
Так можно же не через командную строку
...
Рейтинг: 0 / 0
FTP через командную строку в C#
    #38983150
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запускать ftp c ключом -n

после команды open послать команду
user <user> <password>

в конце не забыть послать quit

очень грубо -
Код: 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.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
class Test
{    
    public void start()
    {
        Process p = new Process();
        ProcessStartInfo info = new ProcessStartInfo();
        info.FileName = "ftp.exe";
        info.CreateNoWindow = true;
        info.Arguments = "-n";
        info.RedirectStandardOutput = true;
        info.RedirectStandardInput = true;
        info.RedirectStandardError = true;
        info.UseShellExecute = false;
        p.StartInfo = info;
        p.OutputDataReceived += (e, d) => { Console.WriteLine(d.Data); };
        p.ErrorDataReceived += (e, d) => { Console.WriteLine(d.Data); };
        p.Start();
        p.BeginOutputReadLine();
        p.BeginErrorReadLine();
        p.StandardInput.Write("open us1.hostedftp.com\n");
        p.StandardInput.Write("user z3r9@ya.ru 123456\n");        
        p.StandardInput.Write("dir\n");
        p.StandardInput.Write("quit\n");
        p.StandardInput.Flush();
        p.WaitForExit();
    }
}

...
Рейтинг: 0 / 0
FTP через командную строку в C#
    #38983154
z3r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile, пробовал и через файл не работало. Нужна командная строка потому что работа со строкой нужна и не только для ftp.

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


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