C# パス操作方法まとめ
目次
ファイルパスからファイル名を取得する
パスからファイル名(拡張子付き)を取得する
System.IO.Path.GetFileNameメソッドを使うと指定したファイルパスからファイル名を取得することができます。
引数にはファイルパス(文字列型)を指定します。
戻り値は拡張子付きのファイル名になります。
using System;
using System.IO;
class Program
{
public static void Main()
{
string filePath = @"C:\yasnote\src\test.txt";
// パスからファイル名を取得
Console.WriteLine(Path.GetFileName(filePath));
}
}
test.txt
パスからファイル名(拡張子なし)を取得する
System.IO.Path.GetFileNameWithoutExtensionメソッドを使うと指定したパスから拡張子なしのファイル名を取得することができます。
引数にはファイルパス(文字列型)を指定します。
戻り値は拡張子なしのファイル名になります。
using System;
using System.IO;
class Program
{
public static void Main()
{
string filePath = @"C:\yasnote\src\test.txt";
// パスからファイル名(拡張子なし)を取得
Console.WriteLine(Path.GetFileNameWithoutExtension(filePath));
}
}
test
文字列の配列、リストからパスを作成する
System.IO.Path.Combineメソッドを使うと指定された文字列型の配列の各要素を \ でつないでパスを作ることができます。
引数には文字列型の配列を指定します。
戻り値は \ で連結された文字列が返ってきます。
using System;
using System.Collections.Generic;
using System.IO;
class Program
{
public static void Main()
{
// ドライブ、フォルダ名が入った文字列型の配列
var strArray = new string[] { "c:", "yasnote", "source" };
// Combineメソッドで \ でつなげる
var dirPath = Path.Combine(strArray);
Console.WriteLine(dirPath);
// ドライブ、フォルダ名が入った文字列型のリスト
var strList = new List<string> { "c:", "yasnote", "source" };
// リストをCombineメソッドに渡すときはToArrayメソッドで配列に変換して渡す
dirPath = Path.Combine(strList.ToArray());
Console.WriteLine(dirPath);
}
}
出力結果はこんな感じです。
c:\yasnote\source
c:\yasnote\source
また、Combineメソッドの引数には配列ではなく文字列を4つまで指定することができます。この場合も指定された文字列が \ でつなげられた文字列が返ってきます。
using System;
using System.IO;
class Program
{
public static void Main()
{
Console.WriteLine(Path.Combine(@"c\:yasnote", "source"));
Console.WriteLine(Path.Combine(@"c\:yasnote", "source", "repos"));
Console.WriteLine(Path.Combine(@"c\:yasnote", "source", "repos", "testProject"));
}
}
出力結果はこんな感じです。
c\:yasnote\source
c\:yasnote\source\repos
c\:yasnote\source\repos\testProject
パス文字列内のファイル拡張子を変更する
System.IO.Path.ChangeExtensionメソッドを使うとパス文字列内のファイル拡張子を変更することが出来ます。
第1引数にはパス文字列を指定します、第2引数には新しい拡張子を指定します。
新しい拡張子は、.(ドット)を付けても付けなくても構いません。
第2引数をnullにすると、ファイル名だけにすることが出来ます。
戻り値は拡張子が変更されたパス文字列になります。元の文字列は変わりません。
using System;
using System.IO;
class Program
{
public static void Main()
{
// パス文字列
var filePath = @"C:\source\test.txt";
// 拡張子を変更(.を付けて指定)
Console.WriteLine(Path.ChangeExtension(filePath, ".cs"));
// 拡張子を変更(. はなし)
Console.WriteLine(Path.ChangeExtension(filePath, "cs"));
// 空文字を指定すると、最後の.だけ残る
Console.WriteLine(Path.ChangeExtension(filePath, ""));
// nullを指定するとファイル名だけになる
Console.WriteLine(Path.ChangeExtension(filePath, null));
// ファイル名だけでも使える
var fileName = "Test.txt";
Console.WriteLine(Path.ChangeExtension(fileName, "aaa"));
}
}
出力結果です。
C:\source\test.cs
C:\source\test.cs
C:\source\test.
C:\source\test
Test.aaa