Ошибка при загрузке текстового файла на FTP-сервер C#

Я создаю простое приложение, которое загружает файл .txt на FTP-сервер. Я делал это раньше, и я использую тот же код, что и для другого приложения.

это мой код:

string localFilePath = @"\\fileprint\data\Groups\Operation\fileExports\dls\";
string archiveFilePath = @"\\fileprint\data\Groups\Operation\fileExports\dls\Archive\";
string logFilePath = @"C:\Users\lmy\Desktop\Logs";
string ftpServer = "ftp://server:21/home/out2233/tmp";
private string logFileName = "" + DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString();

public void UploadFile()
{
    try
    {
        string[] files = Directory.GetFiles(localFilePath);
        foreach (string file in files)
        {
            string fileName = Path.GetFileName(file);
            string modified = file.Remove(60, 6);
            string modifiedFile = Path.GetFileName(modified);
            FtpWebRequest ftpReq = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServer + modifiedFile));
            ftpReq.Method = WebRequestMethods.Ftp.UploadFile;
            ftpReq.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
            ftpReq.UsePassive = true;
            ftpReq.UseBinary = true;
            ftpReq.KeepAlive = true;
            ftpReq.Credentials = new NetworkCredential("out2233", "password");
            ftpReq.EnableSsl = true;

            FileInfo fileInfo = new FileInfo(localFilePath + @"\" + fileName);
            FileStream fileStream = fileInfo.OpenRead();

            byte[] fileContent = new byte[fileInfo.Length];
            fileStream.Read(fileContent, 0, Convert.ToInt32(fileInfo.Length));

            Stream writer = ftpReq.GetRequestStream();
            writer.Write(fileContent, 0, fileContent.Length);
            fileStream.Close();
            writer.Close();
            FtpWebResponse response = (FtpWebResponse)ftpReq.GetResponse();

            AppendLogFile(response, "Uploaded Files: ", fileName);
            MoveToArchive(file, archiveFilePath + fileName);
        }

    }
    catch (Exception exception)
    {
        Console.WriteLine(exception.Message);
    }
}

Но он получает эту ошибку: exception = {"Невозможно отправить тело содержимого с этим типом глагола."

когда код достигает этой строки:

Stream writer = ftpReq.GetRequestStream();

Я гуглил это, но я могу найти только примеры ASP. Кажется, я не могу понять, что я делаю неправильно здесь. Надеюсь, вы, ребята, можете мне помочь.

Спасибо!


person Lahib    schedule 21.11.2013    source источник


Ответы (1)


Похоже, вы пытаетесь вывести содержимое каталога ftp с помощью этой строки:

ftpReq.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 

(http://msdn.microsoft.com/en-us/library/system.net.webrequestmethods.ftp.listdirectorydetails%28v=vs.110%29.aspx)

Попробуйте удалить его, оставив только эту строку:

ftpReq.Method = WebRequestMethods.Ftp.UploadFile; 

http://msdn.microsoft.com/en-us/library/system.net.webrequestmethods.ftp.uploadfile%28v=vs.110%29.aspx

person Dmytro    schedule 21.11.2013
comment
Это дало мне новую ошибку: exception = {Удаленный сервер вернул ошибку: (530) Не вошел в систему.} Я неправильно ввожу свои учетные данные? - person Lahib; 21.11.2013
comment
@Lahib, попробуйте решения из этого ответа: stackoverflow.com/questions/10352165/ - person Dmytro; 21.11.2013