与文章项的 Id 相比,根据其名称选择特定目录
Selecting a specifik directory depending on its name as compared to the Id of an article item
我正在做一个个人项目,一个网上商店,作为一个 ASP.Net 使用 C# 的核心应用程序。
我正在尝试创建一个 ImageHandler
服务,用于获取位于项目文件夹中的图像。
我正在尝试构建图像,以便在项目中使用代码轻松管理它们,并且易于监督,所以我创建了一堆 subfolders/directories。
路径如下所示:
WebRoot/Images/Articles/ArticleFolder/ArticleImages.jpg
Article
文件夹被命名为 Article.id_Article.Name
所以一个完整的例子是:
\wwwroot\Images\Articles_iPhone 13 Pro Max – 5G smartphone 128GB Silver_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 现在是一个 char,因此不能使用 split 方法。我知道您可以以某种方式将图像作为二进制数据保存在 SQL 数据库中,并且将图像保存在项目文件夹中可能是愚蠢的,这是我的命名约定,但我很好奇您如何解决这个问题。有什么见解吗?
据我了解,您的结构是“/webroot/Images/Articles”(保持不变),结合 /{articleId}+“_”+{articleName}/{imageName},其中项目以卷曲大括号是可变的,对吗?像这样的怎么样?
string imageRootFolder = Path.Combine(Enviroment.WebRootPath, "Images", "Articles");
string articleDir = Directory.GetDirectories(imageRootFolder).Where(dir => dir.StartsWith(articleId.ToString() + "_")).First();
List<string> pathsToImages = Directory.GetFiles(Path.Combine(imageRootFolder, articleDir)).ToList();
我正在做一个个人项目,一个网上商店,作为一个 ASP.Net 使用 C# 的核心应用程序。
我正在尝试创建一个 ImageHandler
服务,用于获取位于项目文件夹中的图像。
我正在尝试构建图像,以便在项目中使用代码轻松管理它们,并且易于监督,所以我创建了一堆 subfolders/directories。
路径如下所示:
WebRoot/Images/Articles/ArticleFolder/ArticleImages.jpg
Article
文件夹被命名为 Article.id_Article.Name
所以一个完整的例子是:
\wwwroot\Images\Articles_iPhone 13 Pro Max – 5G smartphone 128GB Silver_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 现在是一个 char,因此不能使用 split 方法。我知道您可以以某种方式将图像作为二进制数据保存在 SQL 数据库中,并且将图像保存在项目文件夹中可能是愚蠢的,这是我的命名约定,但我很好奇您如何解决这个问题。有什么见解吗?
据我了解,您的结构是“/webroot/Images/Articles”(保持不变),结合 /{articleId}+“_”+{articleName}/{imageName},其中项目以卷曲大括号是可变的,对吗?像这样的怎么样?
string imageRootFolder = Path.Combine(Enviroment.WebRootPath, "Images", "Articles");
string articleDir = Directory.GetDirectories(imageRootFolder).Where(dir => dir.StartsWith(articleId.ToString() + "_")).First();
List<string> pathsToImages = Directory.GetFiles(Path.Combine(imageRootFolder, articleDir)).ToList();