Получить абсолютный путь к серверу (физический путь) файла для FileInfo
Я использую провайдера сервера EPi:
<add virtualPath="~/WorkplaceFiles/" physicalPath="C:\Temp Files\Workplaces"
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, а не физический.
Как я могу взять физический путь, чтобы я мог найти файл с FileInfo
?
// When I'm on this line I would like my path string to be "C:\Temp Files\Workplaces\2999\Documents\document.txt"
FileInfo file = new FileInfo(path);
2 ответа
При повторном чтении вопроса правильный метод выглядит как 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).