如何将文件路径作为字符串进行操作?

时间:2015-05-11 18:39:15

标签: c# asp.net

我在JavaScript中使用splice()函数。

我无法找到ASP.NET的等效方法。有没有?

如果没有,我如何在ASP.NET中插入或删除数组的索引?

我正在尝试使用此代码编写的JavaScript代码的逻辑。尝试对ASP.NET做同样的事情,如果这会有所帮助。

var imagePath = "/ImageFolder/Gallery/AnAlbum/image.jpg";
var folders = imagePath.split("/");
var imageFile = folders[folders.length - 1];
folders.splice(folders.length - 1, 1);
var newPath = folders.join("/");
var newImageUrl = newPath + "/thumb/thumb_" + imageFile;
return newImageUrl;

编辑:

什么是拼接?

From

  

array.splice(start,deleteCount [,item1 [,item2 [,...]]])

     

参数

     

开始

     

开始更改数组的索引。如果大于   数组的长度,实际的起始索引将设置为长度   数组。如果是否定的,将从最后开始那么多元素。

     

deleteCount

     

一个整数,表示旧数组元素的数量   去掉。如果deleteCount为0,则不删除任何元素。在这种情况下,   你应该至少指定一个新元素。如果deleteCount更大   然后,比起从开始时开始的数组中剩余的元素数量   将删除数组末尾的所有元素。

     

itemN

     

要添加到数组的元素。如果你没有指定任何   elements,splice()只会从数组中删除元素。

     

返回

     

包含已删除元素的数组。如果只有一个元素   删除后,返回一个元素的数组。如果没有元素   删除后,返回一个空数组。

预期输出:

Fiddle

  

/ImageFolder/Gallery/AnAlbum/image.jpg

     

/ ImageFolder/Gallery/AnAlbum/thumb/thumb_image.jpg

7 个答案:

答案 0 :(得分:3)

.NET中的数组具有固定大小,因此无法在数组上直接转换splice(),但如果使用List<>而不是数组,那么{{1} <},InsertRemoveRange()方法可以满足相同的需求。

Remove

答案 1 :(得分:3)

而不是尝试操作数组(如果你仍然想要,StriplingWarrior has a good answer showing you how).NET有一个更大的工具集来直接处理路径。您的问题可以简化为

var imagePath = "/ImageFolder/Gallery/AnAlbum/image.jpg";
var folder = Path.GetDirectoryName(imagePath);
var imageFile = Path.GetFileName(imagePath);
var newImageUrl = folder + "/thumb/thumb_" + imageFile;
return newImageUrl;

答案 2 :(得分:2)

您可以改为使用List

var imagePath = "/ImageFolder/Gallery/AnAlbum/image.jpg";
var folders = imagePath.Split('/');
var imageFile = folders[folders.Length - 1];
var foldersList = new List<String>(folders);
foldersList.RemoveAt(folders.Length - 1);
var newPath = String.Join("/", foldersList.ToArray());
var newImageUrl = newPath + "/thumb/thumb_" + imageFile;
return newImageUrl;

答案 3 :(得分:2)

使用List代替数组。然后,您可以使用List.Insert(index, item)List.RemoveAt(index)

RemoveAt并没有像splice那样返回您的值。但是,无论如何你都不会使用它。

答案 4 :(得分:1)

你可以使用正则表达式一次完成整个过程。

var imagePath = "/ImageFolder/Gallery/AnAlbum/image.jpg";
var newImageUrl = Regex.Replace(imagePath, "/(?!.*/)", "/thumb/thumb_");

Console.WriteLine (imagePath);
// ouput is /ImageFolder/Gallery/AnAlbum/image.jpg

Console.WriteLine (newImageUrl);
// output is /ImageFolder/Gallery/AnAlbum/thumb/thumb_image.jpg

该模式正在寻找最后一个斜线。 (斜线之后没有出现其他斜杠)

答案 5 :(得分:1)

您可以为List编写扩展方法。

public static class SpliceExtension
{
    public static List<T> Splice<T>(this List<T> list, int offset, int count)
    {
        return list.Skip(offset).Take(count).ToList();
    }
}

答案 6 :(得分:0)

您不能轻易地在.NET中拼接数组,因为数组是固定大小的。最接近的是创建一个新数组并复制您想要保留的项目。

您可以使用字符串操作方法创建新字符串,而不是拆分字符串:

string imagePath = "/ImageFolder/Gallery/AnAlbum/image.jpg";

return imagePath.Insert(imagePath.LastIndexOf('/') + 1, "thumb/thumb_");