以下のようなコード行を使用すると、個々のファイルのパス全体を含む文字列配列が得られます。
private string[] pdfFiles = Directory.GetFiles("C:\\Documents", "*.pdf");
パス全体ではなく、文字列内のファイル名のみを取得する方法があるかどうかを知りたいのですが。
以下のようなコード行を使用すると、個々のファイルのパス全体を含む文字列配列が得られます。
private string[] pdfFiles = Directory.GetFiles("C:\\Documents", "*.pdf");
パス全体ではなく、文字列内のファイル名のみを取得する方法があるかどうかを知りたいのですが。
回答:
Path.GetFileNameフルパスからファイル名を取得するために使用できます
private string[] pdfFiles = Directory.GetFiles("C:\\Documents", "*.pdf")
.Select(Path.GetFileName)
.ToArray();
編集:上記のソリューションはLINQを使用しているため、少なくとも.NET3.5が必要です。以前のバージョンで機能するソリューションは次のとおりです。
private string[] pdfFiles = GetFileNames("C:\\Documents", "*.pdf");
private static string[] GetFileNames(string path, string filter)
{
string[] files = Directory.GetFiles(path, filter);
for(int i = 0; i < files.Length; i++)
files[i] = Path.GetFileName(files[i]);
return files;
}
using System.Linq;ファイルの先頭に追加し、System.Coreアセンブリがまだ存在しない場合はアセンブリへの参照を追加します。.NET 3.5以降が必要です。必要に応じて.NET2.0のソリューションを投稿します
string[] fileEntries = Directory.GetFiles(directoryPath);
foreach (var file_name in fileEntries){
string fileName = file_name.Substring(directoryPath.Length + 1);
Console.WriteLine(fileName);
}
Substringを使用するのではなく、使用する理由をPath、潜在的により堅牢な方法で説明できますか?
たくさんの方法があります:)
1番目の方法:
string[] folders = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly);
string jsonString = JsonConvert.SerializeObject(folders);
2番目の方法:
string[] folders = new DirectoryInfo(yourPath).GetDirectories().Select(d => d.Name).ToArray();
3番目の方法:
string[] folders =
new DirectoryInfo(yourPath).GetDirectories().Select(delegate(DirectoryInfo di)
{
return di.Name;
}).ToArray();
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GetNameOfFiles
{
public class Program
{
static void Main(string[] args)
{
string[] fileArray = Directory.GetFiles(@"YOUR PATH");
for (int i = 0; i < fileArray.Length; i++)
{
Console.WriteLine(fileArray[i]);
}
Console.ReadLine();
}
}
}
単にlinqを使用できます
Directory.EnumerateFiles(LoanFolder).Select(file => Path.GetFileName(file));
注:コレクション全体が返される前に名前のコレクションの列挙を開始できるため、EnumeratesFilesはDirectory.GetFilesよりも効率的です。