.net WF4工作流/活动中的相对文件路径

.net WF4工作流/活动中的相对文件路径,.net,asp.net,wcf,workflow,.net,Asp.net,Wcf,Workflow,此工作流是asp.net应用程序中的xamlx文件 我有一个代码活动,它具有一个不规则的代码,它将相对文件路径带到一个文本文件,该文件位于asp.net应用程序中 将相对路径转换为绝对路径的正确方法是什么,这样我就可以将文件读入内存 HttpContext.Current在代码活动中为null,因此我无法使用Server.MapPath 我现在让它工作的方法是从web.config读取名为SitePhysicalRoot的应用程序设置,并将SitePhysicalRoot设置和inargumen

此工作流是asp.net应用程序中的xamlx文件

我有一个代码活动,它具有一个不规则的代码,它将相对文件路径带到一个文本文件,该文件位于asp.net应用程序中

将相对路径转换为绝对路径的正确方法是什么,这样我就可以将文件读入内存

HttpContext.Current在代码活动中为null,因此我无法使用Server.MapPath

我现在让它工作的方法是从web.config读取名为SitePhysicalRoot的应用程序设置,并将SitePhysicalRoot设置和inargument值传递给Path.Combine

我觉得有更好的方法可以做到这一点(也许有WF扩展)。如果要使用WF扩展,是否有人可以提供示例代码?

请尝试以下*:

*未经测试,在我的生活中从未使用过WF,不知道它是否会起作用,这只是我想到的第一件事

这就是我所做的:

using System;
using System.Diagnostics.Contracts;
using System.IO;
using System.Web.Hosting;

public static class PathExtensions
{
    public static String ExpandPath(this String path)
    {
        if (String.IsNullOrWhiteSpace(path))
        {
            return path;
        }

        String resolvedPath = Environment.ExpandEnvironmentVariables(path);

        resolvedPath = ExpandHostedPath(resolvedPath);

        return resolvedPath.ToFullPath();
    }

    public static String ToFullPath(this String path)
    {
        Contract.Requires<ArgumentNullException>(String.IsNullOrWhiteSpace(path) == false);

        DirectoryInfo directory = new DirectoryInfo(path);

        if (directory.Exists)
        {
            return directory.FullName;
        }

        return path;
    }

    private static String ExpandHostedPath(String path)
    {
        if (Path.IsPathRooted(path))
        {
            return path;
        }

        if (path.StartsWith("~", StringComparison.OrdinalIgnoreCase) == false)
        {
            return path;
        }

        if (HostingEnvironment.IsHosted == false)
        {
            return path;
        }

        String hostedPath = HostingEnvironment.MapPath(path);

        return hostedPath;
    }
}
使用系统;
使用System.Diagnostics.Contracts;
使用System.IO;
使用System.Web.Hosting;
公共静态类路径扩展
{
公共静态字符串路径(此字符串路径)
{
if(String.IsNullOrWhiteSpace(path))
{
返回路径;
}
字符串resolvedPath=Environment.ExpandEnvironmentVariables(路径);
resolvedPath=ExpandHostedPath(resolvedPath);
返回resolvedPath.ToFullPath();
}
公共静态字符串ToFullPath(此字符串路径)
{
Contract.Requires(String.IsNullOrWhiteSpace(path)=false);
DirectoryInfo目录=新的DirectoryInfo(路径);
if(directory.Exists)
{
返回directory.FullName;
}
返回路径;
}
专用静态字符串ExpandHostedPath(字符串路径)
{
if(Path.IsPathRooted(Path))
{
返回路径;
}
if(path.StartsWith(“~”,StringComparison.OrdinalIgnoreCase)==false)
{
返回路径;
}
if(HostingEnvironment.IsHosted==false)
{
返回路径;
}
字符串hostedPath=HostingEnvironment.MapPath(路径);
返回寄宿路径;
}
}

然后,您可以将该代码放入基于接口定义的扩展中。
using System;
using System.Diagnostics.Contracts;
using System.IO;
using System.Web.Hosting;

public static class PathExtensions
{
    public static String ExpandPath(this String path)
    {
        if (String.IsNullOrWhiteSpace(path))
        {
            return path;
        }

        String resolvedPath = Environment.ExpandEnvironmentVariables(path);

        resolvedPath = ExpandHostedPath(resolvedPath);

        return resolvedPath.ToFullPath();
    }

    public static String ToFullPath(this String path)
    {
        Contract.Requires<ArgumentNullException>(String.IsNullOrWhiteSpace(path) == false);

        DirectoryInfo directory = new DirectoryInfo(path);

        if (directory.Exists)
        {
            return directory.FullName;
        }

        return path;
    }

    private static String ExpandHostedPath(String path)
    {
        if (Path.IsPathRooted(path))
        {
            return path;
        }

        if (path.StartsWith("~", StringComparison.OrdinalIgnoreCase) == false)
        {
            return path;
        }

        if (HostingEnvironment.IsHosted == false)
        {
            return path;
        }

        String hostedPath = HostingEnvironment.MapPath(path);

        return hostedPath;
    }
}