【发布时间】:2021-11-19 19:35:45
【问题描述】:
我正在开发一个个人项目,一个网上商店,作为一个带有 C# 的 ASP.Net Core 应用程序。
我正在尝试创建一个ImageHandler 服务,用于获取位于项目文件夹中的图像。
我正在尝试构建图像,以便它们易于在项目中使用代码进行管理,并且易于监督,因此我创建了一堆子文件夹/目录。
路径如下:
WebRoot/Images/Articles/ArticleFolder/ArticleImages.jpg
Article 文件夹被命名为 Article.id_Article.Name,所以一个完整的例子是:
\wwwroot\Images\Articles\1_iPhone 13 Pro Max – 5G smartphone 128GB Silver\1_01.jpg.
我正在尝试编写一个语句,通过在文件夹名称的第一部分选择与它所属的文章的 ID 相同的部分来为给定文章找到正确的文件夹。
我的第一次尝试是这样的:
var path = Path.Combine(Enviroment.WebRootPath, "Images", "Articles");
string dir = Directory.GetDirectories(path).First(d => Path.GetFileName(d).StartsWith(articleId.ToString()));
但是,如果我在哪里寻找 id 为 1 的图像,则该行会给我一个以 10_article.Name 开头的目录,所以显然这是行不通的。
然后我尝试了:
string dir2 = Directory.GetDirectories(path).First(d => Path.GetFileName(d).Where(d => d.Split('_')[0] == articleId.ToString()));
我认为这可行,但我在d.Split('_')[0] 上收到错误消息。它声称 d 现在是一个字符,因此不能使用方法 split 。我知道您可以以某种方式将图像保存为 SQL 数据库中的二进制数据,并将图像保存在项目文件夹中可能很愚蠢,就像我的命名约定一样,但我很好奇您如何解决这个问题。有什么见解吗?
【问题讨论】:
-
我想你的意思是
...First(d => Path.GetFileName(d).Split('_')[0] == articleId.ToString());
标签: c# asp.net-core directory path