【问题标题】:Extract part of the string before separator "/" character提取分隔符“/”之前的部分字符串
【发布时间】:2016-09-05 01:26:21
【问题描述】:

我有一个表格的文件位置 FileName = "C:\Data\PronetContent\Content\Versions\14602\Working\1234.htm"

我需要除 htm 文件名之外的字符串部分 - 1234.htm

所以我想要的结果是“C:\Data\PronetContent\Content\Versions\14602\Working”

我实现了这段代码sn-p:

string[] fileLocation = FileName.Split('/');
string[] fileLocation1 = fileLocation.Take(fileLocation.Count() - 1).ToArray();
string Floc = string.Join("/", fileLocation1);

但我得到一个空字符串。请帮忙

【问题讨论】:

  • 那么,您正在处理路径 - 为什么不使用 System.IO.Path 类及其静态方法呢?他们完全解决了这个问题......另一件事:请不要使用string.Join 或者 - 更一般地说 - 搅拌连接来构建路径 - 而使用System.IO.Path.Combine
  • 或者您使用FileInfo 获取FileName 并将其替换为""
  • 使用调试器检查每一步;然后理清你需要做什么。另外,搜索类似的问题。这已经被问过很多次了,例如here
  • 这就是MSDN 文档的用途。对这个问题的纯粹懒惰感到震惊,我们不是来分发代码的。不仅如此,您还可以访问 MSDN,这是您的首选文档,内容更丰富。

标签: c# .net string split


【解决方案1】:

首先,在基于 Windows 的机器上使用 / 上的拆分不会拆分您的字符串,因为它是由 \

拆分的

你可以使用

Path.GetDirectoryName()

所以,

Path.GetDirectoryName(FileName)

将返回您的路径

【讨论】:

  • 可能会美化答案,突出路径分隔符中的环境差异。 msdn.microsoft.com/en-us/library/…
  • @t0mm13b Path 类应该为其运行的系统实现适当的逻辑。在使用 '\' 分隔路径的基于 *nix 的系统上,分隔符设置得当,Path.GetDirectoryName 方法应该仍然有效。您是否在阅读第一行后发表评论而未阅读其余答案?
  • @Corey 我删除了我的评论并添加了一条建议的评论以指示 / 和 \ 而不管 Path 处理差异作为提醒和推动有关使用字符串黑客获取目录组件.
  • @t0mm13b 由于 OP 专门使用 Windows 样式的路径,因此提及 *nix 路径规则的问题可能与问题无关,特别是因为答案对两个系统都非常有效。跨度>
  • 是的。你真的很懒不是你
【解决方案2】:

你在那里有一个绝对路径,所以如果你确定你总是有一个绝对路径,你可以使用Path.GetDirectoryName(strPath),如下所示:

//absolute path
var filePath = @"C:\Data\PronetContent\Content\Versions\14602\Working\1234.htm";
var pathWithoutFileName = Path.GetDirectoryName(filePath);

【讨论】:

  • 感谢您的帮助 :-)
  • @nseries73 如果您接受对您有帮助的答案,我想我们这里的任何人都会感激不尽。
猜你喜欢
  • 2023-03-10
  • 2017-06-27
  • 2017-12-25
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多