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

时间:2011-05-31 21:43:59

标签: .net asp.net wcf workflow

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

我有一个带有InArgument的CodeActivity,它接受一个存在于asp.net应用程序中的文本文件的相对文件路径。

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

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

我现在使用它的方法是从web.config读取一个名为SitePhysicalRoot的appsetting,并将SitePhysicalRoot设置和inargument值传递给Path.Combine。

我觉得有更好的方法(可能有WF扩展名)。如果要使用WF扩展,有人可以提供示例代码吗?

2 个答案:

答案 0 :(得分:0)

尝试以下 *

var path = Path.Combine(HostingEnvironment.ApplicationPhysicalPath, "foo.txt");

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

答案 1 :(得分:0)

这就是我的所作所为:

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