分かりやすく、使いやすく。

FTP で指定したディレクトリのファイルの一覧を取得する方法

スポンサーリンク

PowerShell では WebRequest を使用することで、FTP でディレクトリ内のファイル一覧を取得することができます。

  1. ファイル名の一覧のみ取得する場合
  2. ファイル名と属性情報の一覧を取得する


ファイル名の一覧のみ取得する場合

サンプルコードは次の通りです。

PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# FTP接続に必要な情報を設定
$user     = 'your_account';
$pass     = 'your_password';
$hostName = 'your.host.jp';
 
# ファイルの一覧を取得する対象のディレクトリのパス
# (最後はスラッシュで終わらせる)
$targetDirectoryPath = '/bayashita.com/test/';
 
# FTP接続用のURL
$ftpUrl = 'ftp://' + $hostName + $targetDirectoryPath;
 
# 接続
$webRequest = [System.Net.WebRequest]::Create($ftpUrl);
$webRequest.Credentials = New-Object System.Net.NetworkCredential($user, $pass);
 
# 実行する処理を設定
$webRequest.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectory;
 
try
{
    # リクエスト実行
    $response = $webRequest.GetResponse();
    $ftpDataStream = $response.GetResponseStream();
    $streamReader = New-Object System.IO.StreamReader($ftpDataStream);
 
    # ファイル名(文字列)のリストを取得
    $list = $streamReader.ReadToEnd();
 
    foreach($item in $list)
    {
        # ファイル名を出力
        Write-Host $item;
    }
 
    $streamReader.Close();
}
catch
{
    Write-Host 'エラーが発生しました';
    Write-Host $_;
} 

実行例は次の通りです。ファイル名にはカレントディレクトリと親ディレクトリを表す . と .. が含まれます。ファイル名だけの為、ファイルかディレクトリかの区別はつきません。

mydirectory
.
test1.txt
..
test2.txt
test3.txt 

ファイル名と属性情報の一覧を取得する

ファイル名だけでなく属性情報も含めて取得する場合は、メソッドに ListDirectoryDetails を指定します。

PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# FTP接続に必要な情報を設定
$user     = 'your_account';
$pass     = 'your_password';
$hostName = 'your.host.jp';
 
# ファイルの一覧を取得する対象のディレクトリのパス
# (最後はスラッシュで終わらせる)
$targetDirectoryPath = '/bayashita.com/test/';
 
# FTP接続用のURL
$ftpUrl = 'ftp://' + $hostName + $targetDirectoryPath;
 
# 接続
$webRequest = [System.Net.WebRequest]::Create($ftpUrl);
$webRequest.Credentials = New-Object System.Net.NetworkCredential($user, $pass);
 
# 実行する処理を設定
$webRequest.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectoryDetails;
 
try
{
    # リクエスト実行
    $response = $webRequest.GetResponse();
    $ftpDataStream = $response.GetResponseStream();
    $streamReader = New-Object System.IO.StreamReader($ftpDataStream);
 
    # ファイル名(文字列)のリストを取得
    $list = $streamReader.ReadToEnd();
 
    foreach($item in $list)
    {
        # ファイル名を出力
        Write-Host $item;
    }
 
    $streamReader.Close();
}
catch
{
    Write-Host 'エラーが発生しました';
    Write-Host $_;
} 

上記の実行例は次の通りです。

drwxr-xr-x   3 user@bayashita.com 1000         4096 Mar  7 21:52 .
drwx--x--x  15 user@bayashita.com 1000         4096 Mar  7 21:38 ..
drwxr-xr-x   2 user@bayashita.com 1000         4096 Mar  7 21:47 mydirectory
-rw-r--r--   1 user@bayashita.com 1000            3 Mar  7 21:47 test1.txt
-rw-r--r--   1 user@bayashita.com 1000            4 Mar  7 21:47 test2.txt
-rw-r--r--   1 user@bayashita.com 1000            0 Mar  7 21:47 test3.txt 
スポンサーリンク
スポンサーリンク