使用子字符串消除目录路径不起作用

时间:2018-10-04 19:23:07

标签: c#

我需要修剪目录路径,以便文件仅显示在TextBox中。我不断收到超出范围的错误。

这是我的代码:

string startPath = "";
string results = "";

string[] filePaths = Directory.GetFiles(@"C:\TwinTable\LeftTableO0201", "*.*");

startPath = filePaths.ToString();
results = startPath.Substring(28);

TboxLeftTable.Text = results;

我要修剪的路径是:C:\TwinTable\LeftTableO0201\3100200210.TA4

4 个答案:

答案 0 :(得分:2)

只需使用此:

string startPath = "";
string results = "";

string[] filePaths = Directory.GetFiles(@"C:\TwinTable\LeftTableO0201", "*.*");

if (filePaths.Length > 0)
   TboxLeftTable.Text = System.IO.Path.GetFileName(filePaths[0]);

答案 1 :(得分:2)

首先,这是不正确的:

startPath = filePaths.ToString();

因为您有一个数组。 相反,您应该遍历数组元素。 您的代码应如下所示:

string[] filePaths = Directory.GetFiles(@"C:\TwinTable\LeftTableO0201", "*.*");
foreach (string startPath in filePaths)
{
    result = Path.GetFileName(startPath);
    TboxLeftTable.Text += result;
}

答案 2 :(得分:1)

在数组上调用ToString会导致System.String[]demo),在这种情况下28的索引超出范围(返回的字符串只有15个字符)。

可能您希望具有修剪后的值数组,在这种情况下,您应该使用LINQ例如:

filePaths.Select(s => s.Substring(28)).ToArray();

或者,如果只想使用数组的单个条目,则应该使用:

startPath = filePaths[0]; //or whatever element you want to use

答案 3 :(得分:0)

这可用于将目录中的文件名获取到一个数组(文件名):

var directory = @"C:\TwinTable\LeftTableO0201";
var fileNames = Directory.EnumerateFiles(directory).Select(Path.GetFileName).ToArray();

这可能用于设置Text对象的TboxLeftTable属性,也许:

TboxLeftTable.Text = fileNames.First();