Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问不带正则表达式的Azure容器的Blob名称_C#_Azure - Fatal编程技术网

C# 访问不带正则表达式的Azure容器的Blob名称

C# 访问不带正则表达式的Azure容器的Blob名称,c#,azure,C#,Azure,我正在尝试访问Azure Blob的文件名。例如,如果我当前正在返回字符串privatecontainer/Text-pc.txt,并且我正试图访问Text-pc.txt。问题是每个Azure容器中都有不同的文件。我已经列出了我正在使用的代码,从用户指定的Azure容器生成Blob列表 mainlun() 有没有一种方法可以直接访问Text-pc.txt,而不必使用regex?我不想使用正则表达式的原因是,当存在虚拟文件夹/目录时,上面的for循环成功地打印出文件名。但是,在包含没有虚拟文件夹/

我正在尝试访问Azure Blob的文件名。例如,如果我当前正在返回字符串
privatecontainer/Text-pc.txt
,并且我正试图访问
Text-pc.txt
。问题是每个Azure容器中都有不同的文件。我已经列出了我正在使用的代码,从用户指定的Azure容器生成Blob列表

mainlun()


有没有一种方法可以直接访问
Text-pc.txt
,而不必使用regex?我不想使用正则表达式的原因是,当存在虚拟文件夹/目录时,上面的
for
循环成功地打印出文件名。但是,在包含没有虚拟文件夹/目录的blob的容器上,它将打印
publiccontainer/Text-pc.txt
,即
(/File\u name)

添加对System.Linq和

var str = "privatecontainer/Text-pc.txt";
var splittedStr = str.Split('/');
var name = splittedStr.Last();

你可能想让它更健壮一点

您可以使用substring,因为我认为可以安全地假设blob名称中没有
/
字符。这样,您就可以在最后一个斜杠之后获取所有内容的子字符串。这是完美的。这与正则表达式方法非常相似

如果这不起作用,您可以使用Uri的属性。最后一个应该是您的文件名

在下面的循环中添加了两种方法:

    foreach (var blobItem in container.ListBlobs(useFlatBlobListing: true))
    {
      Console.WriteLine(blobItem.Parent.Uri.MakeRelativeUri(blobItem.Uri));

      //Segments Method
      Console.WriteLine(blobItem.Uri.Segments.Last());

      //Substring Method
      string filename = blobItem.AbsolutUri.Substring(det.Filename.LastIndexOf("/") + 1)
      Console.WriteLine(fileName);
    }

另一种解决方案是将
blobItem
转换为
CloudBlob
,并使用其
Name
属性。比如:

        foreach (var blobItem in container.ListBlobs(useFlatBlobListing: true))
        {
                            Console.WriteLine((blobItem as CloudBlob).Name);
        }

请注意,对于虚拟文件夹中的blob,将打印完整路径(
虚拟文件夹名称/文件名
),因为这是blob的名称。如果您只需要文件名,您可能需要应用Stephen提出的解决方案,并使用
/
分隔符拆分字符串。

如果您的文件名没有斜杠,则不应该使用斜杠,因为这样无法区分文件夹或文件名,然后,只需查找最后一个斜杠,就可以得到字符串的其余部分:

var cleanFileName = fileName.Substring(fileName.LastIndexOf("/") + 1);

@jdave当我第二次看这个问题时,我不能100%确定我读对了问题中的问题。因此,如果这不是答案或者这需要改进,请在此处发表评论。如果有人像我一样来到这里,寻找nodejs/javascript的解决方案,sdk中没有用于此的方法,但这里有一个关于regex的要点:
var cleanFileName = fileName.Substring(fileName.LastIndexOf("/") + 1);