#author("2019-11-30T20:54:53+09:00","","")
#navi(../)

* ファイルなの?ディレクトリなの?の判別方法 [#ecc18483]
System.IO.File.Exists、System.IO.Directory.Existsを使って、ファイルなのかディレクトリなのか?を~
判別することが可能ですが、本記事では、''System.IO.File.GetAttributes''を使って、~
ファイルの各種属性(隠しファイル、リードオンリーファイルなどの各種属性)を取得するメソッドを利用し、~
普通のファイル属性(System.IO.FileAttributes.Archive、System.IO.FileAttributes.Normal)・ディレクトリ属性(System.IO.FileAttributes.Directory)なのかを判定し~
ファイルorディレクトリの判別を行うサンプルコードになります。~
尚、ファイルやディレクトリが存在しないと、例外が発生するのでerrorを返却しています。~
&color(red){細かなファイル属性(FileAttributes)までは対応していないサンプルコードなのでご了承ください。};

#htmlinsert(windev-top.html)
#contents

* 参考サイト [#l212866d]
-[[Microsoft|.NET File.GetAttributes(String) メソッド>https://docs.microsoft.com/ja-jp/dotnet/api/system.io.file.getattributes?view=netframework-4.8]]
-[[Microsoft|.NET FileAttributes 列挙型>https://docs.microsoft.com/ja-jp/dotnet/api/system.io.fileattributes?view=netframework-4.8]]

* 関連記事 [#lcd8befb]
-[[ファイルの有無を確認する>.NET/ファイルの有無を確認する]]
-[[ディレクトリの有無を確認する>.NET/ディレクトリの有無を確認する]]

* File.GetAttributes(String)メソッド [#i1e3d908]
File.GetAttributes(String)メソッドの引数にある、Stringにファイル属性を調べたいパスを文字列(String)で指定します。~
指定したファイル(ディレクトリ)が存在した場合、FileAttributes列挙型に該当する値が返却されます。

*サンプルコード [#t4ee222f]
File.GetAttributes、FileAttributesを使って、ファイルなのかディレクトリなのか?を判別するサンプルコードを以下に記します。~
尚、指定したファイル、ディレクトリが存在しない場合、GetAttributesメソッドは例外を発生させますので、例外発生時はerrorを返却しています。

*C#サンプルコード [#iefd67a5]
#ref(Program.cs)
 using System;
 
 namespace GetAttrCS
 {
     class Program
     {
         static void Main(string[] args)
         {
             String file = @"C:\Windows\System32\drivers\etc\hosts";
             String dir = @"C:\Windows";
             String notExist = @"C:\path\to";
             Console.WriteLine(file + ":" + GetAttr(file));
             Console.WriteLine(dir + ":" + GetAttr(dir));
             Console.WriteLine(notExist + ":" + GetAttr(notExist));
         }
 
         static String GetAttr(String pathto)
         {
             String result = "";
             System.IO.FileAttributes attr ;
 
             try
             {
                 attr = System.IO.File.GetAttributes(pathto);
                 if ((attr & System.IO.FileAttributes.Directory) == System.IO.FileAttributes.Directory)
                 {
                     result = "Directory";
                 }
                 else if((attr & System.IO.FileAttributes.Archive) == System.IO.FileAttributes.Archive)
                 {
                     result = "Archive file";
                 }
                 else if ((attr & System.IO.FileAttributes.Normal) == System.IO.FileAttributes.Normal)
                 {
                     result = "Normal file";
                 }
                 else
                 {
                     result = "unknown";
                 }
             }
             catch (Exception)
             {
                 result = "error";
             }
 
             return result;
         }
     }
 }
 

*Visual Basic(VB)サンプルコード [#q22e5c12]
#ref(Module1.vb)
 Module Module1
 
     Sub Main()
         Dim file As String = "C:\Windows\System32\drivers\etc\hosts"
         Dim dir As String = "C:\Windows"
         Dim notExist As String = "C:\path\to"
         Console.WriteLine(file & ":" & GetAttr(file))
         Console.WriteLine(dir & ":" & GetAttr(dir))
         Console.WriteLine(notExist & ":" & GetAttr(notExist))
     End Sub
 
     Function GetAttr(pathto As String) As String
         Dim result As String = ""
         Dim attr As System.IO.FileAttributes
 
         Try
             attr = System.IO.File.GetAttributes(pathto)
             If ((attr And System.IO.FileAttributes.Directory) = System.IO.FileAttributes.Directory) Then
                 result = "Directory"
             ElseIf ((attr And System.IO.FileAttributes.Archive) = System.IO.FileAttributes.Archive) Then
                 result = "Archive file"
             ElseIf ((attr And System.IO.FileAttributes.Normal) = System.IO.FileAttributes.Normal) Then
                 result = "Normal file"
             Else
                 result = "unknown"
             End If
         Catch ex As Exception
             result = "error"
         End Try
 
         Return result
     End Function
 
 End Module
 
** 実行結果 [#ub693115]
実行結果のキャプチャになります。~
ファイル(System.IO.FileAttributes.Normal、System.IO.FileAttributes.Archive)、ディレクトリ(FileAttributes.Directory)、ファイルが存在しないためエラーの3つが表示されます。
#ref(01.png)

以上、System.IO.File.GetAttributesメソッドを使ってファイルorディレクトリ判別のサンプルコードの紹介でした。

#htmlinsert(windev-btm.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS