【问题标题】:Changing Host Names dynamically [closed]动态更改主机名[关闭]
【发布时间】:2015-05-06 18:38:57
【问题描述】:

我在本地服务器上有地址为\\localServerAddress\Folder\Program.exe 的文件。我需要动态删除服务器地址,并将其替换为表单中其他地方选择的不同服务器地址。服务器名称可以有不同的长度,因此我不能使用string.Substring函数。

所以给定输入

\\localServerAddress\Folder\Program.exe

我想要结果

\\differentServerAddress\Folder\Program.exe

【问题讨论】:

  • 那么如果不是\test,你怎么知道你做什么想要剥离?您的要求还不清楚。
  • 这是我需要更改的服务器位置。我们有多个具有相同文件结构的服务器。我需要将文件从一台服务器移动到另一台服务器,因此删除服务器名称并将其替换为新的服务器地址
  • 您的示例中有两个“\\test”。应该去哪一个?
  • 这实际上并没有给我们要求...
  • 也许看看IndexOf

标签: c# substring


【解决方案1】:

如果您一直在使用 UNC

然后

string toRemove = new Uri(yourString).host;
string newString = yourString.Replace(String.format(@"\\{0})",toRemove)
                                    , String.format(@"\\{0})",whateveryouwant));

【讨论】:

  • UNC 代表什么?
  • 通用命名约定——在Windows操作系统中,UNC名称格式为:\\servername\sharename\path\filename
  • 假设它不是 UNC,因为我真的不知道它是否是。
  • 我会尽快尝试,看看是否有效。
  • 这非常接近我的需要。我不得不稍微调整一下。这是结束结果string removeName = new Uri(SourcePathString).Host; string fullNewSourcePath = SourcePathString.Replace(string.Format(@"\\{0}\", removeName), string.Format(@"{0}", NewSourcePathString)); NewSourcePathString = fullNewSourcePath; return NewSourcePathString;
【解决方案2】:

使用这个方法:

    string changeServerInPathString(string originalString, string newServer)
    {
        List<string> stringParts = originalString.TrimStart('\\').Split('\\').ToList();
        stringParts.RemoveAt(0);
        stringParts.Insert(0, newServer);
        return string.Join("\\", stringParts.ToArray()).Insert(0, "\\\\");
    }

【讨论】:

  • 无法从 'System.Collections.Generic.List' 转换为 'string[]'
  • 糟糕 - 修复了错误。立即尝试。
  • 这很好,只是它不添加文件夹名称及以后。示例:localServer\FolderName\Test.program 将移动到 NYCServer\SameFolderName\Test.program。唯一需要做的就是去掉服务器名称,但保留其余信息
【解决方案3】:

你可以这样使用:

void Main()
{
    string path = @"\\localServerAddress\Folder\Program.exe";

    UriBuilder bld = new UriBuilder(path);
    bld.Host = "NewServer";
    Console.WriteLine(bld.Uri.LocalPath);
}

结果:\\newserver\Folder\Program.exe

【讨论】:

    【解决方案4】:
        string text =   @"\\test\FolderName\foo.exe";
        text = text.Replace('\\', '-'); \\ this is done as I was not able to make the regex **\\\\\\(.)*?\\** , work.
        Regex rg = new Regex("--.*?-"); \\ if in case the above mentioned regex is made to work correctly please replace the regex with the same.
        text  = rg.Replace(text, "");
        Console.WriteLine(text.Replace('-', '\\'));
    
        Console.Read();
    

    【讨论】:

      猜你喜欢
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多