目次

URLからディレクトリ名を取得する

URLからURLの示すディレクトリを取得するコードを紹介します。

プログラム

UI

下図のUIを作成します。(実際に使用するのは一番上のボタンのみです)

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace PathStringProcessing
{
  public partial class FormUrlPath : Form
  {
    public FormUrlPath()
    {
      InitializeComponent();
    }

    private void button_Reference_Click(object sender, EventArgs e)
    {

    }

    private string GetCurrentURlDir(string URL)
    {
      for (int i = URL.Length - 1; i >= 0; i--) {
        if (URL[i] == '/') {
          URL = URL.Substring(0, i);
          break;
        }
      }
      return URL;
    }
   
    private void button1_Click(object sender, EventArgs e)
    {
      string URLString = textBox_Path.Text;

      string dirName = GetCurrentURlDir(URLString);
      textBox_Output.Text += dirName + "\r\n";
    }
  }
}
解説
private string GetCurrentURlDir(string URL)
{
  for (int i = URL.Length - 1; i >= 0; i--) {
    if (URL[i] == '/') {
      URL = URL.Substring(0, i);
      break;
    }
  }
  return URL;
}
によりファイルが存在するディレクトリのURLを取得します。動作はURLの末尾から1文字づつ文字を確認し最初に"/"が見つかった場所以前の文字列がディレクトリを示すURLと判定します。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


上部のテキストにURLを入力し、ボタンをクリックします。


ディレクトリを指し示すURLが下部のテキストボックスに表示されます。


注意

URLがディレクトリを示すURLの場合はそのディレクトリのURLではなく、1階層上のディレクトリのURLが結果になることに注意してください。

補足

private void button1_Click(object sender, EventArgs e)
{
  string URLString = textBox_Path.Text;

  string dirName = Path.GetDirectoryName(URLString);
  textBox_Output.Text += dirName + "\r\n";
}
Button1のClickイベントハンドラのコードを下記に変更し、Path.GetDirectoryName()メソッドを用いた実装に変えてもおおむね正しく動作しますが、パスのディレクトリ区切りが"\"になってしまう点に注意が必要です。(下図参照)

注意

今回紹介した実装(GetCurrentURlDir()メソッド、Path.GetDirectoryName()メソッド)のどちらを用いても、URLに拡張パスが含まれていた場合は正しく認識できない結果になりますので注意してください。



著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2014-07-28
iPentec all rights reserverd.