繁体   English   中英

如何将文件路径作为字符串处理?

[英]How Can I Manipulate a File Path as a String?

我在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;

编辑:

什么是接头?

来自

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

参量

开始

开始更改数组的索引。 如果大于数组的长度,则实际的起始索引将设置为数组的长度。 如果为负,则将从头开始那么多元素。

deleteCount

一个整数,指示要删除的旧数组元素的数量。 如果deleteCount为0,则不会删除任何元素。 在这种情况下,您应该至少指定一个新元素。 如果deleteCount大于开始时数组中剩余的元素数,则将删除数组末尾的所有元素。

项目N

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

退货

包含已删除元素的数组。 如果仅删除一个元素,则返回一个元素的数组。 如果没有删除任何元素,则返回一个空数组。

预期产量:

小提琴

/ImageFolder/Gallery/AnAlbum/image.jpg

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

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

var imagePath = "/ImageFolder/Gallery/AnAlbum/image.jpg";
var folders = imagePath.Split('/').ToList(); // make it a list
var imageFile = folders[folders.Count - 1];
folders.RemoveAt(folders.Count - 1); // or folders.RemoveRange(folders.Count - 1, 1);

var newPath = string.Join("/", folders);
var newImageUrl = newPath + "/thumb/thumb_" + imageFile;
return newImageUrl;

.NET拥有一个更大的工具集来直接使用路径,而不是尝试操纵数组(如果您仍然愿意, StriplingWarrior会很好地向您展示如何 )。 您的问题可以简化为

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;

您可以改用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;

使用List而不是数组。 然后,您可以利用List.Insert(index, item)List.RemoveAt(index)

RemoveAt不会像splice那样返回值。 但是,无论如何,它看起来都不是您正在使用它。

您可以使用正则表达式一次完成整个操作。

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

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

您可以为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();
    }
}

您不能轻易在.NET中拼接数组,因为数组是固定大小的。 最接近的方法是创建一个新数组,然后将要保留的项目复制到其中。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM