0

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);

FileInfophysicalPath ではなく virtualPath を使用しているため、このファイルを見つけることができません。

でファイルを見つけることができるように、physicalPath を取得するにはどうすればよい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);
4

2 に答える 2

1

質問をもう一度読むと、適切な方法はVirtualPathUnifiedProvider.TryGetHandledAbsolutePathのようです

それを使用すると、次のようになります。

string path;
provider.TryGetHandledAbsolutePath("2999/Documents/document.txt", out path);

FileInfo file = new FileInfo(path);
于 2012-08-10T11:42:54.670 に答える
1

これはあなたができることです (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) です。

于 2013-02-14T22:16:17.120 に答える