【发布时间】:2019-11-26 17:31:36
【问题描述】:
我的目标是实现一个端点,它返回从某个根目录开始的所有文件和目录的嵌套列表,例如C:\Temp。我写了以下代码:
namespace API.Controllers
{
public class UploadController : BaseController
{
[Route("api/Uploaded", Order = -1)]
[ResponseType(typeof(IEnumerable<string[]>))] // <- this has to be adjusted, I guess.
public IHttpActionResult AutoUpload()
{
string[] entries = Directory.GetFileSystemEntries("C:\Temp", "*", SearchOption.AllDirectories);
// <-- Here should come some conversion to a nested JSON.
return Ok(entries);
}
}
}
当我查询端点时,例如与curl -X POST --header 'Accept: application/json' 'http://localhost:63291/api/Uploaded' 的响应是什么
[
"C:\\\\Temp\\file1",
"C:\\\\Temp\\dir1\\file2",
"C:\\\\Temp\\dir1\\file3"
]
我宁愿拥有类似以下的东西
[
{ "~":
[ "file1" ]
},
{
"~/dir1":
[
"file2" ,
"file3"
]
}
]
我确信将我的列表转换为嵌套的 JSON 不会那么复杂,但不知何故我无法做到。我担心,我错过了适当的搜索词。请帮忙!
【问题讨论】:
-
好吧,
Directory.GetFileSystemEntries将返回与您的搜索模式匹配的所有项目的数组。要返回嵌套,您需要迭代路径以正确创建结构。您可能会创建一个包含父目录和子目录的对象,以在您最终展平的基础上进行分组,但您需要遍历和解析自己以创建嵌套结构。