循环时如何替换字符串中的字符?

时间:2019-10-04 17:40:59

标签: c# string loops replace

我想验证文件是否在多台服务器上。服务器上唯一不同的是服务器上的数字,例如。 Server1,Server2,Server3等

我将如何编写一个循环,将每个数字替换为下一个最高的数字,直到服务器10为止?

这是我到目前为止所拥有的:

var fileLocation = @"\\Server1\documents\File.txt";
var newFileInfoTest = fileLocation.Replace("Server1", "Server2");

if (File.Exists(newFileInfoTest))
    txtTextBox.Text = "Server1 -- File copy successful.";
else
    txtTextBox.Text = "Server1 -- File copy unsuccessful";

4 个答案:

答案 0 :(得分:3)

  

“我将如何编写一个循环,将每个数字替换为下一个最高的数字,直到服务器10为止?”

您可以使用循环迭代器值作为服务器名称的一部分,在循环中设置服务器名称

for(int i = 1; i <= 10; i++)
{
    txtTextBox.Text = File.Exists($@"\\Server{i}\documents\File.txt")
        ? $"Server{i} -- File copy successful."
        : $"Server{i} -- File copy unsuccessful";
}

请注意,上面的代码将在每次迭代时覆盖txtTextBox.Text值。您可能想要捕获循环中的所有状态,然后在最后显示它们:

txtTextBox.Text = string.Join(Environment.NewLine, Enumerable.Range(1, 10)
    .Select(i => File.Exists($@"\\Server{i}\documents\File.txt")
        ? $"Server{i} -- File copy successful."
        : $"Server{i} -- File copy unsuccessful."));

在您询问的评论中:

  

“如果文件位置在变量中,您将如何处理?”

执行此操作的一种方法是使用带数字的占位符({0})格式字符串,然后使用string.Format在循环内填充该占位符。

我们可以使用string.Split字符上的\从字符串中提取服务器名称,并获取第一项。

例如:

var serverPath = @"\\Server{0}\documents\File.txt";

txtTextBox.Text = string.Join(Environment.NewLine, Enumerable.Range(1, 10)
    .Select(i =>
    {
        var thisPath = string.Format(serverPath, i);
        var serverName = thisPath.Split(new[] { '\\' },
            StringSplitOptions.RemoveEmptyEntries).First();
        return File.Exists(thisPath)
            ? $"{serverName} -- File copy successful."
            : $"{serverName} -- File copy unsuccessful.";
    }));

答案 1 :(得分:1)

您可以执行以下操作,确保您的消息不会被覆盖,可以使用字符串生成器代替串联。希望你能理解

    var msg = string.Empty;
    for(int i = 1; i <  11; i++) { 
        var fileLocation = $"\\Server{i}\documents\File.txt";

         if (File.Exists(fileLocation))
         {
           msg += $"Server{i} -- File copy successful.";
         }
         else
         {
           msg += $"Server{i} -- File copy unsuccessful."; 
         }
    }

    txtTextBox.Text = msg;

答案 2 :(得分:0)

尝试一下:

for (int i = 0; i < 11; i++){
 var fileLocation = $@"\\Server{i}\documents\File.txt";

 if (File.Exists(fileLocation))
    txtTextBox.Text = $"Server{i} -- File copy successful.";
 else
    txtTextBox.Text = $"Server{i} -- File copy unsuccessful";
 }
}

答案 3 :(得分:0)

  

“我如何编写一个循环,将每个数字替换为下一个最高的数字,直到服务器10为止?”

var numberofServers = 10;
for(int i =0; i <= numberOfServers; i++){
var fileLocation = $"\\Server{i}\\documents\\File.txt";

if(File.Exists(fileLocation)){
//Success
}    
else{
//UnSuccessful
}
}