2011-05-31 58 views
0

此工作流程是asp.net应用程序中的xamlx文件。WF4工作流程/活动中的相对文件路径

我有一个带有InArgument的CodeActivity,它将一个相对文件路径带到一个生活在asp.net应用程序中的文本文件。

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

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

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

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

回答

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

然后,您可以把这些代码为基础的接口定义的扩展。 – 2011-05-31 22:35:08

0

请尝试以下*

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

*未经检验的,从来没有使用过WF在我的生活,不知道是否是要去工作,它只是来到我想到的第一件事