如何在 Orchard 和 System.IO.File 方法中使用(根)相对路径?
How to use (root) relative paths with Orchard and System.IO.File methods?
我开发了一个处理文件的模块。使用波浪号在主题中提供文件是可以的,但这似乎在控制器中不起作用,我在控制器中使用 System.IO.File
方法处理文件,如 Move()
或 Delete()
。现在我使用绝对路径,但它们不可行 - 该模块应该在不同的机器上使用并且仍然存储在一个存储库中。
如何找到在每种情况下我应该将哪个根用于 root-relaive 路径?如果没有通用规则,如何在管理 upload/download/viewing 个文件时找到它?还是更复杂?
我的文件存储在:(SolutionRoot)/Orchard.Web/Media/Default/_FooBar/
我已经尝试将所有文件夹作为相对根目录,但没有用。
在我看来,HostingEnvironment.MapPath
可能就是您要找的东西。
如果不是,那么您可以向正在执行的程序集询问它的位置,然后从那里找出答案:
var codeBaseUrl = Assembly.GetExecutingAssembly().CodeBase;
var filePathToCodeBase = new Uri(codeBaseUrl).LocalPath;
var directoryPath = Path.GetDirectoryName(filePathToCodeBase);
我开发了一个处理文件的模块。使用波浪号在主题中提供文件是可以的,但这似乎在控制器中不起作用,我在控制器中使用 System.IO.File
方法处理文件,如 Move()
或 Delete()
。现在我使用绝对路径,但它们不可行 - 该模块应该在不同的机器上使用并且仍然存储在一个存储库中。
如何找到在每种情况下我应该将哪个根用于 root-relaive 路径?如果没有通用规则,如何在管理 upload/download/viewing 个文件时找到它?还是更复杂?
我的文件存储在:(SolutionRoot)/Orchard.Web/Media/Default/_FooBar/
我已经尝试将所有文件夹作为相对根目录,但没有用。
在我看来,HostingEnvironment.MapPath
可能就是您要找的东西。
如果不是,那么您可以向正在执行的程序集询问它的位置,然后从那里找出答案:
var codeBaseUrl = Assembly.GetExecutingAssembly().CodeBase;
var filePathToCodeBase = new Uri(codeBaseUrl).LocalPath;
var directoryPath = Path.GetDirectoryName(filePathToCodeBase);