.NET TIPS

8.3形式の短いパスを長いパスに変換するには?[2.0のみ、C#、VB]

デジタルアドバンテージ 一色 政彦
2007/09/27

 Windows OS以前のMS-DOSシステムでは、フォルダやファイルの名前に8.3形式の短い名前しか利用できなかった。8.3形式とは、(「.」より前の)ファイル・ベース名部分が最大で8文字、(「.」以降の)ファイル拡張子部分が最大3文字で構成する、フォルダ/ファイル名の命名規則のことだ。

 現在のWindows OSでも、一部、8.3形式の命名規則が用いられている個所(例えば、レジストリの値など)が存在し、そのような場合には既存のパスに対して自動生成された、8.3形式の短い形式のパスを使用する必要がある。

 長い形式のパスと短い形式のパスは例えば次のようなものだ。

  • 長い形式のパス:C:\Program Files\Mozilla Firefox\FIREFOX.EXE
  • 短い形式のパス:C:\PROGRA~1\MOZILL~1\FIREFOX.EXE

 この例では、「Program File」は「PROGRA~1」に、「Mozilla Firefox」は「MOZILL~1」に(8文字に)縮められている。

 もちろん短い形式のパスでもあっても通常どおりファイルやディレクトリにアクセスできるのだが、例えばそれをユーザーに表示する場合には長い形式の方が分かりやすい。

 そこで本TIPSでは、8.3形式の短いパスを長いパスに変換する方法について解説する(ただし本稿の方法は、.NET Framework 2.0以降にしか対応していない。1.xで同じ内容を実現するには、Win32 APIのGetLongPathName関数を利用する方法などがある)。

短い8.3形式のパスを長い形式のパスに変換する方法

 短いパスを長いパスに変換する方法は、.NET Frameworkが提供するメソッドを単に呼び出すだけだ。具体的には、Pathクラス(System.IO名前空間)の静的メソッドGetFullPathを呼び出せばよい。このメソッドは、第1パラメータに短いパスを受け取り、戻り値で長いパスを返す(いずれも文字列型)(GetFullPathメソッドは.NET Framework 1.xから存在するが、本来、相対パスなどから絶対パスを求めるためのもので、本稿で示すような目的では利用できなかった)。

 以上の処理を実装したコード例を次に示す。

using System;
using System.IO;

class Program
{
  static void Main(string[] args)
  {
    string shortPath = @"C:\PROGRA~1\MOZILL~1\FIREFOX.EXE";
    string longPath = Path.GetFullPath(shortPath);
    Console.WriteLine(longPath);
    // 出力例:C:\Program Files\Mozilla Firefox\FIREFOX.EXE
  }
}
Imports System.IO

Module Module1

  Sub Main()
    Dim shortPath As String = "C:\PROGRA~1\MOZILL~1\FIREFOX.EXE"
    Dim longPath As String = Path.GetFullPath(shortPath)
    Console.WriteLine(longPath)
    ' 出力例:C:\Program Files\Mozilla Firefox\FIREFOX.EXE
  End Sub

End Module
短いパスを長いパスに変換するコンソール・アプリケーションのサンプル・プログラム(上:C#、下:VB)

 後日、逆に長いパスから短いパスに変換する方法についても紹介する予定だ。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:クラス・ライブラリ 処理対象:パス
使用ライブラリ:Pathクラス(System.IO名前空間)

この記事と関連性の高い別の.NET TIPS
長いパスを8.3形式の短いパスに変換するには?
アプリケーション設定情報はどこに保存すべきか?
パス文字列からファイル名部分を取り出すには?
作業フォルダのパスを取得/設定するには?
パス文字列からディレクトリ・パス部分を取り出すには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間