0

SPWeb.GetFileメソッドを使用すると、URL全体またはURLの一部のみを渡すことができることに気付きました。

私のファイルがservername/sites / SiteA / DocumentLibrary / Folder/file.txtにあるとしましょう。(私はhttpを省略します)

SiteA=サーバー名/サイト/SiteA

   using (SPWeb oWebsiteFrom = new SPSite(SiteA).OpenWeb())
   {          
          SPFile oSrcSPFile = oWebsiteFrom.GetFile(ServerURL + "/" + DocLibrary+ "/" + Folder + "/" + fileName);
   }

これは、GetFileでServerURLなしで使用することもできます。

    using (SPWeb oWebsiteFrom = new SPSite(SiteA).OpenWeb())
   {          
          SPFile oSrcSPFile = oWebsiteFrom.GetFile(DocLibrary+ "/" + Folder + "/" + fileName);
   }

GetFileメソッドでserverURLを使用する場合と使用しない場合の違いは何ですか?

4

1 に答える 1

1

基本的には同じです。

パラメータとしてUrlを使用する多くのSharePointメソッド(すべてではない)は、「GetWebRelativeUrlFromUrl」という名前の内部メソッドを呼び出してUrlを処理します

以下は、SPWeb.GetFileを呼び出すときに呼び出されるメソッドのコードです。

ご覧のとおり、文字列はUriSchemeオブジェクトとして解析され、文字列がServerRelative uriSchemeの場合、メソッドはそれを絶対URLに「変換」します。

internal SPFile GetFile(string strUrl, byte iLevel)
{
    string webRelativeUrlFromUrl = this.GetWebRelativeUrlFromUrl(strUrl);
    if (webRelativeUrlFromUrl.Length == 0)
    {
        throw new ArgumentException();
    }
    return new SPFile(this, webRelativeUrlFromUrl, iLevel);
}


internal string GetWebRelativeUrlFromUrl(string strUrl)
{
    return this.GetWebRelativeUrlFromUrl(strUrl, true, true);
}



internal string GetWebRelativeUrlFromUrl(string strUrl, bool includeQueryString, bool canonicalizeUrl)
{
    string str;
    char[] chrArray;
    if (strUrl == null)
    {
        throw new ArgumentNullException();
    }
    if (strUrl.Length == 0)
    {
        return strUrl;
    }
    if (canonicalizeUrl || !includeQueryString)
    {
        strUrl = Utility.CanonicalizeFullOrRelativeUrl(strUrl, includeQueryString, out flag);
        canonicalizeUrl = 0;
        includeQueryString = 1;
    }
    UriScheme uriScheme = SPWeb.GetUriScheme(strUrl);
    if (uriScheme == UriScheme.ServerRelative)
    {
        string serverRelativeUrl = this.ServerRelativeUrl;
        if (!SPUtility.StsStartsWith(strUrl, serverRelativeUrl))
        {
            throw new ArgumentException();
        }
        str = strUrl.Substring(serverRelativeUrl.Length);
        if (str.Length > 0)
        {
            if (str.get_Chars(0) == 47)
            {
                return str.Substring(1);
            }
            if (uriScheme == UriScheme.Http || uriScheme == UriScheme.Https)
            {
                if (uriScheme == UriScheme.Http && strUrl.Contains(":80/"))
                {
                    strUrl = strUrl.Remove(strUrl.IndexOf(":80/"), ":80/".Length - 1);
                }
                bool flag2 = false;
                if (!SPUtility.StsStartsWith(strUrl, this.Url))
                {
                    using (SPSite sPSite = new SPSite(strUrl))
                    {
                        if (sPSite.ID != this.Site.ID)
                        {
                            throw new ArgumentException();
                        }
                        UriBuilder uriBuilder = new UriBuilder(new Uri(strUrl));
                        uriBuilder.Scheme = sPSite.Protocol.TrimEnd(new char[] { 58 });
                        uriBuilder.Host = sPSite.HostName;
                        uriBuilder.Port = sPSite.Port;
                        strUrl = uriBuilder.Uri.ToString();
                    }
                    flag2 = SPUtility.StsStartsWith(strUrl, this.Url);
                }
                else
                {
                    flag2 = true;
                }
                if (flag2)
                {
                    str = strUrl.Substring(this.Url.Length);
                    if (str.Length > 0)
                    {
                        if (str.get_Chars(0) == 47)
                        {
                            return str.Substring(1);
                        }
                        throw new ArgumentException();
                        if (!strUrl.StartsWith("_"))
                        {
                            bool flag3 = true;
                            try
                            {
                                if (false || -1 == strUrl.IndexOf(58) || null != new Uri(strUrl))
                                {
                                    flag3 = false;
                                }
                            }
                            catch
                            {
                            }
                            if (!flag3)
                            {
                                throw new ArgumentException();
                            }
                        }
                        str = strUrl;
                    }
                }
            }
        }
    }
    return str;
}
于 2012-06-19T08:55:32.123 に答える