当我在“_Pub”上分割一个字符串并且获取字符串的后半部分时它会删除第一个字符,我遇到了一个问题我不明白为什么或如何修复它,除非我将字符添加回来
strFilePath = "/C:/Dev/Edge/_Publications/Ann Report/2013-2016/2016 Edge.pdf"
Dim relPath = strFilepath.Split("_Publications")(1)
lb.CommandArgument = relPath
返回出版物\ Ann Report \ 2013-2016 \ 2016 Edge.pdf
答案 0 :(得分:3)
作为分隔符的内容不是字符串数组“string()”,而是常规字符串。您需要一个字符串数组来使用字符串作为分隔符。否则它需要你的字符串的第一个字符。
https://msdn.microsoft.com/en-us/library/tabh47cf(v=vs.110).aspx
试试这个
Dim relPath = strFilepath.Split(new string() {"_Publications"}, StringSplitOptions.RemoveEmptyEntries)(1)
答案 1 :(得分:0)
您似乎希望从某个目录开始获取路径的一部分。拆分路径可能不是一个好主意:想象一下目录“C:\ Dev \ Edge \ _Publications”中是否有文件“My_Publications_2017.pdf”。您在问题中的意图分割将给出字符串数组{“C:\ Dev \ Edge \”,“\ My”,“_ 2017.pdf”}。正如其他地方所指出的那样,你使用的String.Split无论如何都不会这样做。
更强大的方法是找到起始目录的名称在完整路径中的位置,并获取以它开头的路径的子串,例如:
Function GetRelativePath(fullPath As String, startingDirectory As String) As String
' Fix some errors in how the fullPath might be supplied:
Dim tidiedPath = Path.GetFullPath(fullPath.TrimStart("/".ToCharArray()))
Dim sep = Path.DirectorySeparatorChar
Dim pathRoot = sep & startingDirectory.Trim(New Char() {sep}) & sep
Dim i = tidiedPath.IndexOf(pathRoot)
If i < 0 Then
Throw New DirectoryNotFoundException($"Cannot find {pathRoot} in {fullPath}.")
End If
' There will be a DirectorySeparatorChar at the start - do not include it
Return tidiedPath.Substring(i + 1)
End Function
所以,
Dim s = "/C:/Dev/Edge/_Publications/Ann Report/2013-2016/2016 Edge.pdf"
Console.WriteLine(GetRelativePath(s, "_Publications"))
Console.WriteLine(GetRelativePath(s, "\Ann Report"))
输出:
_Publications \ Ann Report \ 2013-2016 \ 2016 Edge.pdf
Ann Report \ 2013-2016 \ 2016 Edge.pdf
猜测您可能有几个格式错误的路径以“/”开头并使用“/”作为目录分隔符而不是“\”,我会放入一些代码来缓解这些问题。
答案 2 :(得分:-1)
Split()函数应该从结果中排除整个分隔符。你可以重新检查一下吗?确认输入和输出字符串?