在C#中通过FTP编辑文本文件?

在C#中通过FTP编辑文本文件?,c#,ftp,streamreader,streamwriter,C#,Ftp,Streamreader,Streamwriter,基本上,我想使用以下代码编辑C#文件: 但它不起作用,我该怎么做 通过FTP编辑文件是: 下载文件 本地编辑文件(内存中) 上传文件 对于步骤1和3,请检查。检查.NET 4.0中包含的类以帮助完成此操作。与ftplib库相比,FtpWebRequest似乎非常复杂@ 这是他们的例子 using (FtpConnection ftp = new FtpConnection("ftpserver", "username", "password")) { ftp.Open();

基本上,我想使用以下代码编辑C#文件:

但它不起作用,我该怎么做

通过FTP编辑文件是:

  • 下载文件
  • 本地编辑文件(内存中)
  • 上传文件

  • 对于步骤1和3,请检查。

    检查.NET 4.0中包含的类以帮助完成此操作。

    与ftplib库相比,FtpWebRequest似乎非常复杂@

    这是他们的例子

       using (FtpConnection ftp = new FtpConnection("ftpserver", "username", "password"))
       {
    
       ftp.Open(); /* Open the FTP connection */
       ftp.Login(); /* Login using previously provided credentials */
    
       if (ftp.DirectoryExists("/incoming")) /* check that a directory exists */
           ftp.SetCurrentDirectory("/incoming"); /* change current directory */
    
       if (ftp.FileExists("/incoming/file.txt"))  /* check that a file exists */
           ftp.GetFile("/incoming/file.txt", false); /* download /incoming/file.txt as file.txt to current executing directory, overwrite if it exists */
    
       //do some processing
    
       try
       {
           ftp.SetCurrentDirectory("/outgoing");
           ftp.PutFile(@"c:\localfile.txt", "file.txt"); /* upload c:\localfile.txt to the current ftp directory as file.txt */
       }
       catch (FtpException e)
       {
           Console.WriteLine(String.Format("FTP Error: {0} {1}", e.ErrorCode, e.Message));
       }
    
       foreach(var dir in ftp.GetDirectories("/incoming/processed"))
       {
           Console.WriteLine(dir.Name);
           Console.WriteLine(dir.CreationTime);
           foreach (var file in dir.GetFiles())
           {
               Console.WriteLine(file.Name);
               Console.WriteLine(file.LastAccessTime);
           }
    

    正如我看到的,我有点晚了,但我和你一样面临着同样的问题。在我寻找解决方案后,我找到了一种不用下载和上传文件就能完成更改的方法

    我的目标是在结束时保存程序执行期间所做的所有更改,并在程序开始时从FTP服务器中存储的.txt文件加载这些数据

    以下是使用的两种方法:

    public static void Save(ArrayList dataStore)
        {
            WebClient request = new WebClient();
            string url = "ftp://ftpname/directory/" + "file.txt";
            request.Credentials = new NetworkCredential("username", "password");
            Stream postStream = request.OpenWrite(url);
    
            foreach (Data data in dataStore)
            {
                byte[] writeData = Encoding.ASCII.GetBytes(data + "#");
                postStream.Write(writeData, 0, writeData.Length);
            }
        }
    
    public static ArrayList Load()
        {
            ArrayList dataStore = new ArrayList();
    
            WebClient request = new WebClient();
            string url = "ftp://ftpname/directory/" + "file.txt";
            request.Credentials = new NetworkCredential("username", "password");
    
            byte[] newFileData = request.DownloadData(url);
            string fileString = Encoding.UTF8.GetString(newFileData);
    
            if (fileString == "")
            {
                return dataStore;
            }
    
            string[] dataString = fileString.Split('#');
    
            foreach (string data in dataString)
            {
                if (data != "")
                {
                    dataStore.Add(data);
                }
            }
    
            return dataStore;
        }
    

    我认为您需要查找FTP协议,这比像本地文件一样打开和关闭要多得多。你可以制作一个库,让它变得如此简单,但它不是天生的。不工作是一个问题描述,通常被那些不知道/不关心计算机如何工作的人使用,对于软件开发人员来说是完全不合适的。软件开发人员(特别是那些询问StackOverflow问题的人)通常会表达他们想要实现什么、预期结果、他们为了实现它而尝试了什么、获得的结果以及与预期结果的不同之处。那么当你运行这段代码时会发生什么呢?你有例外吗?BSOD?你的电脑死机了?苹果开始从天上掉下来?@Darin Dimitrov我真的认为“不起作用”是一个问题描述,不知道/不关心可能想要帮助解决问题的人经常使用它。Thnx!我最终使用了:var x=newWebClient();x、 BaseAddress=“”;x、 下载文件(x.BaseAddress,“wazadoin.txt”);var xyz=新的StreamReader(“wazadoin.txt”);label1.Text=xyz.ReadLine()@IMAPC这基本上是相同的步骤,只是另一个类。您甚至可以在第2步shell一个编辑器,并添加一个FileSystemWatcher来监视用户何时实际保存文件并自动推送服务器(或者可以选择询问用户)。
    public static void Save(ArrayList dataStore)
        {
            WebClient request = new WebClient();
            string url = "ftp://ftpname/directory/" + "file.txt";
            request.Credentials = new NetworkCredential("username", "password");
            Stream postStream = request.OpenWrite(url);
    
            foreach (Data data in dataStore)
            {
                byte[] writeData = Encoding.ASCII.GetBytes(data + "#");
                postStream.Write(writeData, 0, writeData.Length);
            }
        }
    
    public static ArrayList Load()
        {
            ArrayList dataStore = new ArrayList();
    
            WebClient request = new WebClient();
            string url = "ftp://ftpname/directory/" + "file.txt";
            request.Credentials = new NetworkCredential("username", "password");
    
            byte[] newFileData = request.DownloadData(url);
            string fileString = Encoding.UTF8.GetString(newFileData);
    
            if (fileString == "")
            {
                return dataStore;
            }
    
            string[] dataString = fileString.Split('#');
    
            foreach (string data in dataString)
            {
                if (data != "")
                {
                    dataStore.Add(data);
                }
            }
    
            return dataStore;
        }