【问题标题】:How can i impove my code?我怎样才能改进我的代码?
【发布时间】:2016-12-22 08:40:57
【问题描述】:

因为我没有使用套接字的经验,也不知道如何制作,所以我有这个代码:

public void getGameInfo()
{
     string content;
     do
     {
          WebClient client = new WebClient();
          client.DownloadFile(fileadress, filename);
          client.Dispose();
          StreamReader reader = new StreamReader(filename);
          content = reader.ReadToEnd();
          reader.Close();
     } while (content == "");
     File.Delete(filename);
     string[] lines = content.Split(separator, StringSplitOptions.RemoveEmptyEntries);
     mode = zeilen[0];
     gameInfo = new string[line.Length-1];
     Array.Copy(lines, 1, gameInfo, 0, lines.Length-1);
}

它使用 .txt 文件连接到 Apache 服务器并读取它。但是如果太多 Programms(三个)使用该代码,则会抛出 WebException。 那么有没有办法改进这一点,或者为此制作插座的指南?

编辑 1: 如果我想像这个函数一样写入文件怎么办?

public void setSpielInfo(int line, string input)
{
    WebClient client = new WebClient();
    string content;
    do
    {
        client.DownloadFile(gameadress, filename);
        StreamReader reader = new StreamReader(filename);
        content = reader.ReadToEnd();
        reader.Close();
    } while (content == "");

    string[] lines = content.Split(separator, StringSplitOptions.RemoveEmptyEntries);
    lines[zeile+1] = input;
    byte[] bytearray = Encoding.ASCII.GetBytes(string.Join(Environment.NewLine, lines)); // I've read that byte arrays are faster than string arrays

    FileStream writer = new FileStream(filename, FileMode.Truncate);
    writer.Write(bytearray, 0, bytearray.Length);
    writer.Close();

    client.UploadFile(ftpAdress, filename);
    client.Dispose();
    File.Delete(filename);
}

【问题讨论】:

标签: c# networking


【解决方案1】:

你想阅读string,对吧?那你为什么要下载文件呢?

  string content;

  // Do not dispose explicitly, wrap into using instead  
  using (WebClient client = new WebClient()) {
    content = client.DownloadString(fileadress);
  }

  string[] lines = content.Split(separator, StringSplitOptions.RemoveEmptyEntries);

  mode = lines.FirstOrDefault();    // 1st line
  gameInfo = lines.Skip(1).ToArray();  // all the others

你可以进一步把代码缩短成

  using (WebClient client = new WebClient()) {
    var lines = client
      .DownloadString(fileadress)  
      .Split(separator, StringSplitOptions.RemoveEmptyEntries);

    mode = lines.FirstOrDefault();
    gameInfo = lines.Skip(1).ToArray();
  }

编辑:再次,你真正想要执行什么:下载string,写入文件,上传文件:

  string content;

  // Do not dispose explicitly, wrap into using instead  
  using (WebClient client = new WebClient()) {
    // Download string (text) 
    content = client.DownloadString(fileadress);
    // Write the text to file (override existing if it is)
    File.WriteAllText(filename, content);
    // Upload file
    // think on uploading the string - client.UploadString(ftpAdress, content);
    client.UploadFile(ftpAdress, filename); 
  }

  string[] lines = content.Split(separator, StringSplitOptions.RemoveEmptyEntries);

  mode = lines.FirstOrDefault();    // 1st line
  gameInfo = lines.Skip(1).ToArray();  // all the others

作为进一步改进考虑使用string 不是文件:

  using (WebClient client = new WebClient()) {
    // Download string (text) 
    content = client.DownloadString(fileadress);
    client.UploadString(ftpAdress, content);
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 2021-02-26
    • 1970-01-01
    相关资源
    最近更新 更多