【问题标题】:Edit a text file over FTP in C#?在 C# 中通过 FTP 编辑文本文件?
【发布时间】:2011-06-26 14:43:13
【问题描述】:

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

var file = new StreamReader("ftp://xxx.xxx.x.x/xxx.txt"); //[ip address/file]
        label1.Text = file.ReadLine();
        file.Close();
        var fw = new StreamWriter("ftp://xxx.xxx.x.x/xxx.txt"); //[ip address/file]
        fw.WriteLine(textBox1.Text);
        fw.Close();

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

【问题讨论】:

  • 我认为您需要查找 FTP 协议,这比像本地文件一样打开和关闭更多。您可以创建一个使其变得如此简单的库,但它本身并非如此。
  • 不工作 是一个问题描述,通常由不知道/不关心计算机如何工作的人使用,并且完全不适合软件开发人员。软件开发人员(尤其是那些在 StackOverflow 上提问的人)通常会表达他们想要实现的目标、预期的结果、他们为实现目标而尝试的内容、获得的结果以及与预期结果不同的方式。那么当你运行这段代码时会发生什么?你有例外吗?蓝屏死机?你的电脑死机了?苹果开始从天上掉下来?
  • @Darin Dimitrov 我真的认为“不起作用是一个问题描述,经常被不了解/不关心的人使用”来描述可能想要帮助解决问题的人。

标签: c# ftp streamreader streamwriter


【解决方案1】:

通过 FTP 编辑文件是:

  1. 下载文件
  2. 在本地编辑文件(在内存中)
  3. 上传文件

对于第 1 步和第 3 步,请查看this

【讨论】:

  • 谢谢!我最终使用: var x = new WebClient(); x.BaseAddress = "xxx.xxx.xxx.x/xxx.txt"; x.DownloadFile(x.BaseAddress, "wazadoin.txt"); var xyz = new StreamReader("wazadoin.txt"); label1.Text = xyz.ReadLine();
  • @IMAPC 这步骤基本相同,只是另一个类。
  • 您甚至可以在第 2 步中添加一个编辑器,并添加一个 FileSystemWatcher 来观察用户何时实际保存文件并自动推送到服务器上(或可选地询问用户)。
【解决方案2】:

与 ftplib 库相比,FtpWebRequest 似乎非常复杂@http://ftplib.codeplex.com/

这是他们的例子...

   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);
       }

【讨论】:

    【解决方案3】:

    查看 .NET 4.0 中包含的 FtpWebRequest 类以帮助解决此问题。

    【讨论】:

      【解决方案4】:

      我看到我有点晚了,但我遇到了和你一样的问题,在我寻找解决方案之后,我找到了一种无需下载和上传文件即可进行更改的方法。

      我的目标是在程序结束时保存在程序执行期间所做的所有更改,并在程序启动时从存储在 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;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多