我正在使用 EPi 服务器提供程序:
<add virtualPath="~/WorkplaceFiles/" physicalPath="C:Temp FilesWorkplaces"
name="workplaceFiles" type="EPiServer.Web.Hosting.VirtualPathNativeProvider,EPiServer"
showInFileManager="true" virtualName="workplaceUploadDocuments" bypassAccessCheck="true" maxVersions="5" />
下面是提供程序的定义:
VirtualPathUnifiedProvider provider =
VirtualPathHandler.GetProvider(DocumentConstants.WorkplaceFiles) as VirtualPathUnifiedProvider;
我的问题来了 - 如果我定义一个字符串,例如这样:
string path = "2999/Documents/document.txt"
path = String.Concat(provider.VirtualPathRoot, path);
FileInfo file = new FileInfo(path);
FileInfo
将无法找到此文件,因为它使用的是 virtualPath 而不是 physicalPath。
怎样才能获取物理路径,以便我能够找到带有FileInfo
的文件?
// When I'm on this line I would like my path string to be "C:Temp FilesWorkplaces2999Documentsdocument.txt"
FileInfo file = new FileInfo(path);
再次阅读这个问题,正确的方法似乎是VirtualPathUnifiedProvider.TryGetHandledAbsolutePath
有了它,你会做这样的事情:
string path;
provider.TryGetHandledAbsolutePath("2999/Documents/document.txt", out path);
FileInfo file = new FileInfo(path);
您可以做的(如果您只知道VPP提供商的名称):
const string path = "Testbilder/startsidan_896x240.jpg";
var provider = VirtualPathHandler.GetProvider("SiteGlobalFiles") as VirtualPathUnifiedProvider;
if (provider != null)
{
var virtualPath = VirtualPathUtilityEx.Combine(provider.VirtualPathRoot, path);
var file = VirtualPathHandler.Instance.GetFile(virtualPath, true) as UnifiedFile;
if (file != null)
{
var fileInfo = new FileInfo(file.LocalPath);
}
}
如果您已经知道文件的完整虚拟路径,则可以直接转到VirtualPathHandler.Instance.GetFile(...)。
您需要的命名空间是 EPiServer.Web 和 EPiServer.Web.Hosting(以及 System.IO)。