Относительные пути к файлам в рабочем процессе / деятельности WF4 - PullRequest
0 голосов
/ 01 июня 2011

Этот рабочий процесс является файлом xamlx в приложении asp.net.

У меня есть CodeActivity с InArgument, который принимает относительный путь к текстовому файлу, который находится в приложении asp.net.

Как правильно превратить относительный путь в абсолютный путь, чтобы я мог прочитать файл в память.

HttpContext.Current является нулевым в коде, поэтому я не могу использоватьServer.MapPath.

Теперь у меня все работает, читая набор настроек с именем SitePhysicalRoot из web.config и передавая параметр SitePhysicalRoot и значение аргумента в Path.Combine.

Я чувствуюкак есть лучший способ сделать это (возможно, с расширением WF).Если расширение WF - это путь, может кто-нибудь предоставить пример кода?

Ответы [ 2 ]

0 голосов
/ 01 июня 2011

Вот что я делаю:

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;
    }
}
0 голосов
/ 01 июня 2011

Попробуйте следующее *:

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

* непроверенный, никогда не использовал WF в моей жизни, не знаю, сработает ли это, это было только первое, чтопришло мне в голову

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...