【问题标题】:Selecting a specifik directory depending on its name as compared to the Id of an article item与文章项的 Id 相比,根据其名称选择特定目录
【发布时间】: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


【解决方案1】:

据我了解,您的结构是“/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();

【讨论】:

  • 您好!你完全理解了。我无法让您的确切查询起作用,它什么也没找到(“序列不包含任何元素”),但是您简单地添加下划线 {articleId.ToString() + "_"} 的想法非常有效。感谢您的帮助!
猜你喜欢
  • 2016-08-23
  • 2015-12-19
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多