2011-05-31 57 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在我的生活,不知道是否是要去工作,它只是來到我想到的第一件事