【问题标题】:Using my strings in a IF ELSE在 IF ELSE 中使用我的字符串
【发布时间】:2016-10-13 08:36:23
【问题描述】:

我在编码方面真的很菜鸟,这是我的第一个程序,也是我第一次接触编码软件。

首先让我告诉你我有什么:

private void SaveClose_Click(object sender, RoutedEventArgs e)
{
    using (var fs = new FileStream(@"Resources\arguments.txt", FileMode.Truncate))
    {
    }

    if (Windowed.IsChecked == true)
        windowed = true;
    else
        windowed = false;

    string text = File.ReadAllText(@"Resources\arguments.txt");

    string createTextWindowed = "-screen-fullscreen 0" + Environment.NewLine;
    File.WriteAllText(@"Resources\arguments.txt", createTextWindowed);

    string createTextFullscreen = "-screen-fullscreen 1" + Environment.NewLine;
    File.WriteAllText(@"Resources\arguments.txt", createTextFullscreen);


    if (windowed == true)
        createTextWindowed 
    else
        createTextFullscreen
}

第 21 行和第 23 行(createTextWindowedcreateTextFullscreen)是错误,我想修复它们,但我是菜鸟,所以我不知道如何使用我制作的字符串,我想制作如果windowed = true(我想你明白了),程序写入txt文件“-screen-fullscreen 0”,如果它是false,我试过这个,但当然它不起作用:')

【问题讨论】:

    标签: c# wpf string if-statement


    【解决方案1】:
    1. 您不需要这个,因为 File.WriteAllText 无论如何都会截断文件。

      using (var fs = new FileStream(@"Resources\arguments.txt", FileMode.Truncate))
      {
      }
      
    2. 也将其删除,因为您似乎没有使用它

      string text = File.ReadAllText(@"Resources\arguments.txt");
      
    3. 定义一个字符串变量,根据它是否窗口化来设置要写入的文本。

      string textWrite;
      
      if (windowed == true)
      {
          textWrite = "-screen-fullscreen 0" + Environment.NewLine;
      }
      else
      {
          textWrite = "-screen-fullscreen 1" + Environment.NewLine;
      }
      
    4. 最后只需在文件中写入文本

      File.WriteAllText(@"Resources\arguments.txt", textWrite);
      

    修改后的函数完整代码如下:

    private void SaveClose_Click(object sender, RoutedEventArgs e)
    {
        if (Windowed.IsChecked == true)
            windowed = true;
        else
            windowed = false;
    
        string textWrite;
    
        if (windowed == true)
        {
            textWrite = "-screen-fullscreen 0" + Environment.NewLine;
        }
        else
        {
            textWrite = "-screen-fullscreen 1" + Environment.NewLine;
        }
    
        File.WriteAllText(@"Resources\arguments.txt", textWrite);
    }
    

    【讨论】:

    • 他们似乎希望在“Resources\arguments.txt”文件中的预先存在的文本中附加一个参数?没有确认很难确定。
    • 我认为这是另一个答案的错误复制和粘贴,试图写入文件,不知道 Filemode.Truncate 实际做了什么。身体甚至不在 using 指令中。但是,您确实提出了一个很好的观点。我们需要拭目以待。
    • 但是现在我有一个问题,我必须把“argument.txt”的完整目录(C:\Users\baske\Desktop\Launcher\WpfApplication2\WpfApplication2\Resources\arguments.txt )但将来我希望程序在很多不同的计算机上,而且我知道并不是每个人都有与我相同的启动器(和游戏)目录,你能帮我吗?当我输入@"Ressources\arguments.txt"时它不起作用,它不是在编辑txt文件
    • 我真的很菜鸟,我不知道把它们放在哪里,我试过using System.AppDomain.CurrentDomain.BaseDirectory;,但“CurrentDomain”显示为错误:(@R.Rusev
    【解决方案2】:

    你的代码的逻辑顺序需要改变,所以:

        string text = File.ReadAllText(@"Resources\arguments.txt");
    
        if (Windowed.IsChecked)
        {
          text = text + "-screen-fullscreen 0" + Environment.NewLine;
        }
        else
        {
          text = text + "-screen-fullscreen 1" + Environment.NewLine;
        }
    
        File.WriteAllText(@"Resources\arguments.txt", text);
    

    using 指令不是必需的,因此您可以删除它。

    此外,如果windowed bool 没有在此范围之外使用,则没有必要,您可以直接在 if 语句中使用 Windowed.IsChecked。这使代码更加整洁。

    然后您需要考虑代码的流程和逻辑。所以也许把它画在一张纸上,我的理解是这样的:

    1. "Resources\arguments.txt"读取文本
    2. 如果Windowed.IsChecked 为真,则将参数-screen-fullscreen 0 添加到文本中
    3. 如果Windowed.IsChecked 为假,则将参数-screen-fullscreen 0 添加到文本中
    4. 将新文本保存到文件中。

    也许在记住这些步骤的情况下回顾您的原始代码,看看您是否可以发现冗余代码。

    【讨论】:

      【解决方案3】:

      你只需要稍微改变你的最终逻辑:

      if (windowed == true)
      {
          string createTextWindowed = "-screen-fullscreen 0" + Environment.NewLine;
          File.WriteAllText(@"Resources\arguments.txt", createTextWindowed);
      }
      else
      {
          string createTextFullscreen = "-screen-fullscreen 1" + Environment.NewLine;
          File.WriteAllText(@"Resources\arguments.txt", createTextFullscreen);
      }
      

      然后把支票放在最后

      【讨论】:

        【解决方案4】:

        试试这个

        private void SaveClose_Click(object sender, RoutedEventArgs e)
        {
            string text = File.ReadAllText(@"Resources\arguments.txt");
        
            string createTextWindowed = "-screen-fullscreen 0" + Environment.NewLine;
            string createTextFullscreen = "-screen-fullscreen 1" + Environment.NewLine;
        
            if (Windowed.IsChecked == true)
            {
                  File.WriteAllText(@"Resources\arguments.txt", createTextWindowed);
            }
            else
            {
                  File.WriteAllText(@"Resources\arguments.txt", createTextFullscreen);
            }
        }
        

        【讨论】:

          【解决方案5】:
                  string createText;
          
                  if (Windowed.IsChecked){
                  createText= "-screen-fullscreen 0" + Environment.NewLine;        
                  }
                  else{
                  createText = "-screen-fullscreen 1" + Environment.NewLine;        
              }
          File.WriteAllText(@"Resources\arguments.txt", createText);
          

          【讨论】:

          • @Francefire 这就是你想要做的吗?我修改你的代码更简单
          • @mbadeveloper 为什么需要FileStream 你正在使用File.WriteAllText
          • Mostafiz 你是真的我删除了文件流@Francefire 请使用新代码
          • 我现在完全糊涂了,当我想尝试它时,它说我的 txt 文件被另一个进程使用,但是没有......它在另一个窗口中显示了一行(主窗口) 但这条线应该只在我点击按钮时才起作用
          • @Francefire 我不确定您为什么需要在第一条语句中读取文件?如果您只想将文本写入文件并丢失文件内容,因为对您不重要,请删除第一行字符串 text = File.ReadAllText(@"Resources\arguments.txt");
          猜你喜欢
          • 2014-05-20
          • 2018-03-25
          • 1970-01-01
          • 2019-04-18
          • 2015-09-23
          • 2018-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多