skathirmca1 Ответов: 2

Проблема с перемещением файла из одного каталога в другой


Привет,
У меня есть программа, которая должна переместить файл из одного директория в другой каталог на примере FTP-сервера (ftp://10.3.4.5.1/ftpfolder/folder\test.txt,ftp://10.3.4.5.1/ftpfolder/backup\test.txt)

//This is the statement the OP really has:
//MoveFile("ftp://10.3.4.5.1", "anonymous", "", "/ftpfolder/", "/ftpfolder/backup\\", "test.txt");

//Editor changed to this because the code block formatting doesn't like \\"
MoveFile("ftp://10.3.4.5.1", "anonymous", "", "/ftpfolder/", < See Comment Above >, "test.txt");

public static string MoveFile(string ftpuri, string username, string password, string ftpfrompath, string ftptopath, string filename)
        {     
             string retval = string.Empty;      
            //FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpuri + ftpfrompath + filename);
            FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create("ftp://10.14.21.80/ftpfolder/test.txt");
            ftp.Method = WebRequestMethods.Ftp.Rename;     
            ftp.Credentials = new NetworkCredential(username, password);     
            ftp.UsePassive = true;

//Statment OP really had was this:
//ftp.RenameTo = GetRelativePath("/ftpfolder/test.txt", "/Backup\\") + filename;

//Editor changed to this because the code block formatting doesn't like \\"
            ftp.RenameTo = GetRelativePath("/ftpfolder/test.txt", < See Comment Above >) + filename;


            Stream requestStream = ftp.GetRequestStream();      
            FtpWebResponse ftpresponse = (FtpWebResponse)ftp.GetResponse();      
            Stream responseStream = ftpresponse.GetResponseStream();      
            StreamReader reader = new StreamReader(responseStream);      
            return reader.ReadToEnd(); 
           
        }

 public static string GetRelativePath(string ftpBasePath, string ftpToPath) 
        {
          
            if (!ftpBasePath.StartsWith("/"))
            { 
                throw new Exception("Base path is not absolute");
            } 
            else 
             { 
                ftpBasePath = ftpBasePath.Substring(1); 
            } 
            if (ftpBasePath.EndsWith("/")) 
            { 
                ftpBasePath = ftpBasePath.Substring(0, ftpBasePath.Length - 1);
            } 
            if (!ftpToPath.StartsWith("/")) 
            { 
                throw new Exception("Base path is not absolute");
            } 
            else 
            { 
                ftpToPath = ftpToPath.Substring(1); 
            } 
            if (ftpToPath.EndsWith("/"))
            { 
                ftpToPath = ftpToPath.Substring(0, ftpToPath.Length - 1); 
            } 
            string[] arrBasePath = ftpBasePath.Split("/".ToCharArray()); 
            string[] arrToPath = ftpToPath.Split("/".ToCharArray()); 
            int basePathCount = arrBasePath.Count(); 
            int levelChanged = basePathCount; 
            for (int iIndex = 0; iIndex < basePathCount; iIndex++) 
            { 
                if (arrToPath.Count() > iIndex) 
            { 
                    if (arrBasePath[iIndex] != arrToPath[iIndex]) 
                    { levelChanged = iIndex; 
                      break; 
                    } 
                } 
            } 
            int HowManyBack = basePathCount - levelChanged; 
            StringBuilder sb = new StringBuilder(); 
            for (int i = 0; i < HowManyBack; i++) 
            {
                if (i == 0)
                {
                    sb.Append("ftp://10.3.4.5.1/ftpfolder/");
                }
            } for (int i = levelChanged;   i < arrToPath.Count();  i++) 
                { 
                    sb.Append(arrToPath[i]); //sb.Append("/"); 
                } 
            return sb.ToString(); 
         }


Ошибки : не удается отправить тело содержимого с этим типом глагола.

Пожалуйста, кто - нибудь помогите мне в этом вопросе. Я изо всех сил пытаюсь написать код на этом isssue. Спасибо.

[Edit - суммированная тема и добавленный блок кода]
[Второе редактирование - закомментировал некоторый код, потому что форматирование кода на CP не обрабатывает \\" совершенно правильно, и Форматирование было сброшено для всего блока кода.]

2 Ответов

Рейтинг:
2

skathirmca1

Это не работает.. спасибо вам

Рейтинг:
1

ashwinikumar shende

Я использовал приведенный ниже код, который работает на моей машине, чтобы переместить файл в каталог ftp
твой request.RenameTo это каталог, в который вы хотите переместить файл и Constants.FtpPathSrcFolder это ваш исходный каталог.


FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + Constants.UserName + "@" + Constants.HostName + "/" + Constants.FtpPathSrcFolder + fileName);
             
request.Method = WebRequestMethods.Ftp.Rename;
request.Credentials = new NetworkCredential(Constants.UserName.Normalize(), Constants.Password.Normalize());
request.RenameTo = destFolder + fileName;   //Relative path 
FtpWebResponse response = (FtpWebResponse)request.GetResponse();


ваши пути должны быть "/Outgoing/Processing/- эти косые дорожки.

Спасибо,
Эшвин