|
DelphiXE3 [FMX] ファイル操作関連(4) 2014/07/04 |
前回の続きです。
前回は、System.IOUtils 内の TPath について記述しましたので今回は、TDirectory について見ていきます。
Copy | ディレクトリとその内容をコピーします。 |
CreateDirectory | 指定のパスに新しいディレクトリを作成します。 |
Delete | 指定のパスにあるディレクトリを削除します。 |
Exists | 指定のディレクトリが存在するかどうかをチェックします。 |
GetAttributes | ディレクトリ属性を返します。 |
GetCreationTime | ディレクトリの作成時刻を返します。 |
GetCreationTimeUtc | ディレクトリの作成時刻を UTC(Coordinated Universal Time:協定世界時)タイムゾーンで返します。 |
GetCurrentDirectory | 現在の作業ディレクトリを返します。 |
GetDirectories | 指定のディレクトリ内のサブディレクトリのリストを返します。 |
GetDirectoryRoot | 指定のパスのルート ディレクトリを返します。 |
GetFiles | 指定のディレクトリ内のファイルのリストを返します。 |
GetFileSystemEntries | 指定のディレクトリ内のファイルとサブディレクトリのリストを返します。 |
GetLastAccessTime | ディレクトリの最終アクセス時刻を返します。 |
GetLastAccessTimeUtc | ディレクトリの最終アクセス時刻を UTC(Coordinated Universal Time:協定世界時)タイムゾーンで返します。 |
GetLastWriteTime | ディレクトリの最終書き込み時刻を返します。 |
GetLastWriteTimeUtc | ディレクトリの最終書き込み時刻を UTC(Coordinated Universal Time:協定世界時)タイムゾーンで返します。 |
GetLogicalDrives | このコンピュータ上に存在するすべての論理ドライブのリストを返します。 |
GetParent | あるディレクトリの親ディレクトリを返します。 |
IsEmpty | 指定のディレクトリが空かどうかをチェックします。 |
IsRelativePath | IsRelativePath は、指定したパスが相対パスかどうかを示します。 |
Move | ディレクトリとその内容を移動または名前変更します。 |
SetAttributes | ディレクトリ属性を設定します。 |
SetCreationTime | ディレクトリの作成時刻を変更します。 |
SetCreationTimeUtc | ディレクトリの作成時刻を変更します。 |
SetCurrentDirectory | カレント ディレクトリを設定します。 |
SetLastAccessTime | ディレクトリの最終アクセス時刻を変更します。 |
SetLastAccessTimeUtc | ディレクトリの最終アクセス時刻を変更します。 |
SetLastWriteTime | ディレクトリの最終書き込み時刻を変更します。 |
SetLastWriteTimeUtc | ディレクトリの最終書き込み時刻を変更します。 |
フォームにパネル、メモを配置し、パネル上にボタンを配置します。ボタンのクリックイベントハンドラで、テストコードを実行し、結果をメモ内容に記述させます。uses節に「System.IOUtils」を追加しておきます。
以下、ヘルプより。
Copy |
class procedure Copy(
const SourceDirName, DestDirName: string); static; |
ディレクトリとその内容をコピーします。
ディレクトリとその内容を、指定のパスから別のパスにコピーするには、Copy を使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
SourceDirName | コピー元のディレクトリのパス。 |
DestDirName | コピー先のディレクトリのパス。 |
メモ: 指定のパスが無効または存在しない場合や、パスにアクセスできない場合、Copy は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if not(DirectoryExists(s)) then Mkdir(s);
Memo1.Lines.Clear ;
Memo1.Lines.Add('TEST');
Memo1.Lines.SaveToFile(s+'/TEST.TXT');
t := ExtractFilePath(ParamStr(0))+'TEST1';
TDirectory.Copy(s,t); |
のようにすると、実行プログラムと同じフォルダ内に、「TEST」フォルダを作成し、その中にファイル「TEST.TXT」を作成し、この Copy メソッドで、TESTフォルダを中身ごと TEST1 フォルダとしてコピー出来る事が確認出来ます。(Windows7、MacOSXで確認)
パスの区切りに「\」を使うと MacOSXでは正常動作しません。プログラミング的には、
TPath.DirectorySeparatorChar
又は
TPath.AltDirectorySeparatorChar
を利用した方が良いのかもしれませんが…。
なお、
フォルダ名の最後に「/」があっても大丈夫な様子です。
サブフォルダがあっても丸ごとコピーされる様子です。 |
CreateDirectory
|
class procedure CreateDirectory(
Path: string); static; |
指定のパスに新しいディレクトリを作成します。
指定のパスに新しいディレクトリを作成するには、CreateDirectory を使用します。パスで指定されたディレクトリがまだ存在しない場合、CreateDirectory はそのディレクトリの作成を試みます。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 作成しようとするディレクトリのパス。 |
メモ: 指定の Path が無効、または無効な文字を含む場合、CreateDirectory は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST2';
TDirectory.CreateDirectory(s); |
のようにすると、実行プログラムと同じフォルダ内に「TEST2」フォルダを作成します。「TEST2/」のように、フォルダ名の最後に「/」があっても大丈夫な様子です。
s := ExtractFilePath(ParamStr(0))+'TEST2/TEST3';
TDirectory.CreateDirectory(s); |
のようにすれば、TEST3フォルダも、TEST2フォルダも存在しない場合、TEST2フォルダ・TEST3フォルダを一度に作ってしまう、という事も可能な様子です。(Windows7、MacOSXで確認) |
Delete
|
class procedure Delete(const Path: string);
overload; inline; static;
class procedure Delete(const Path: string;
const Recursive: Boolean); overload; static; |
指定のパスにあるディレクトリを削除します。
指定のパスにあるディレクトリを削除するには、Deleteを使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 削除しようとするディレクトリのパス。 |
Recursive | 削除を再帰的に行います。このパラメータが false の場合は、空でないディレクトリは削除されません。 |
2 番目のバージョンの Delete には、Recursive パラメータがありません。このパラメータは false と見なされます。空でないディレクトリに対して 2 番目のバージョンの Delete を実行すると失敗します。どちらのバージョンの Delete も削除操作が成功したかどうかを報告します。
メモ: 指定の Path が無効、または無効な文字を含む場合、Delete は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST2';
TDirectory.Delete(s); |
のようにすると、実行プログラムと同じフォルダ内に「TEST2」フォルダがあればそれを削除します。「TEST2/」のように、フォルダ名の最後に「/」があっても大丈夫な様子です。但し、「TEST2」フォルダの中にファイルやサブフォルダがあると例外が発生します。
s := ExtractFilePath(ParamStr(0))+'TEST2';
TDirectory.Delete(s,True); |
とすれば、「TEST2」フォルダの中にファイルやサブフォルダがあっても例外は発生せず、フォルダとその中身を全て削除します。
双方とも「TEST2」フォルダが無い状態で実行すると、例外が発生します。
(Windows7、MacOSXで確認) |
Exists
|
class function Exists(const Path: string;
FollowLink: Boolean = True): Boolean; inline; static; |
指定のディレクトリが存在するかどうかをチェックします。
指定のディレクトリが存在するかどうかをチェックするには、Exists を使用します。 指定のパスが存在し、それがディレクトリの場合、Exists は True を返します。それ以外の場合は False を返します。
このメソッドに必要なパラメータの一覧を以下の表に示します:
名前 | 意味 |
Path | チェックしようとするディレクトリのパス。 |
FollowLink | シンボリック リンクが使用されているかどうかを示します。 |
メモ: 指定したパスが無効な場合、Exists メソッドは単に False を返します。
メモ:Path パラメータが シンボリック リンク であり、FollowLink パラメータが True に設定されている場合、このメソッドは対象ディレクトリに対して実行されます。最初の条件が True だが FollowLink パラメータが False に設定されている場合、メソッドはシンボリックリンクに対して実行されます。リンクが壊れている場合、メソッドは常に False を返します。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if (TDirectory.Exists(s)) then
Memo1.Lines.Add('フォルダ「TEST」は存在します')
else
Memo1.Lines.Add('フォルダ「TEST」は存在しません'); |
のようにすると、実行プログラムと同じフォルダ内に「TEST」フォルダがあるかどうかを確認する事が出来ます。「TEST/」のように、フォルダ名の最後に「/」があっても大丈夫です。
(Windows7、MacOSXで確認) |
GetAttributes
|
class function GetAttributes(const Path: string;
FollowLink: Boolean = True): TFileAttributes;
inline; static; |
ディレクトリ属性を返します。
GetAttributes を呼び出すと、指定したディレクトリの属性を取得することができます。 GetAttributes の戻り値は TFileAttribute 値の集合であり、集合内のそれぞれの値が 1 つのファイル属性を表します。
このメソッドに必要なパラメータの一覧を以下の表に示します:
名前 | 意味 |
Path | 属性を取得するディレクトリのパス。 |
FollowLink | シンボリック リンクが使用されているかどうかを示します。 |
メモ: ディレクトリにアクセスできない場合やパスが無効な場合には、GetAttributes は例外を発生させます。
メモ:Path パラメータが シンボリック リンク であり、FollowLink パラメータが True に設定されている場合、このメソッドは対象ディレクトリに対して実行されます。 最初の条件が True だが FollowLink パラメータが False に設定されている場合、メソッドはシンボリック リンクに対して実行されます。 リンクが壊れている場合、メソッドは常に False を返します。 |
type TFileAttributes = set of TFileAttribute;
TFileAttribute = (faReadOnly, faHidden, faSystem, faDirectory, faArchive, faDevice, faNormal, faTemporary, faSparseFile, faReparsePoint, faCompressed, faOffline, faNotContentIndexed, faEncrypted, faSymLink) platform;
faReadOnly
読み取り専用ファイルまたは読み取り専用ディレクトリであることを示します。
faHidden
隠しファイルまたは隠しディレクトリであることを示します。
faSystem
システム ファイルまたはシステム ディレクトリであることを示します。
faDirectory
ディレクトリであることを示します。
faArchive
Windows アーカイブ ファイルであることを示します。
faDevice
Windows デバイス ファイルであることを示します。
faNormal
通常のファイルであることを示します。
faTemporary
一時ファイルまたは一時ディレクトリであることを示します。
faSparseFile
スパース ファイルであることを示します。スパース ファイルとは、ほとんどゼロで埋められた大きいファイルのことです。
faReparsePoint
再解析ポイントであることを示します。再解析ポイントとは、実際のファイルまたはディレクトリにリンクしているユーザー定義データ ブロックのことです。
faCompressed
圧縮ファイルまたは圧縮ディレクトリであることを示します。
faOffline
内容が使用不能なオフライン ファイルであることを示します。
faNotContentIndexed
インデックス付け操作を省略されたファイルであることを示します。
faEncrypted
暗号化されたファイルまたはディレクトリであることを示します。
faSymLink
シンボリック リンクであることを示します。 |
ボタン、開く画面を配置し、
var
s : string ;
a : TFileAttributes ;
begin
if OpenDialog1.Execute then begin
s := ExtractFilePath(OpenDialog1.FileName);
Memo1.Lines.Clear;
Memo1.Lines.Add('【'+s+'】');
a := TDirectory.GetAttributes(s);
if (System.IOUtils.TFileAttribute.faReadOnly in a) then
Memo1.Lines.Add('読み取り専用');
if (System.IOUtils.TFileAttribute.faHidden in a) then
Memo1.Lines.Add('隠し');
if (System.IOUtils.TFileAttribute.faArchive in a) then
Memo1.Lines.Add('Windows アーカイブ');
if (System.IOUtils.TFileAttribute.faNormal in a) then
Memo1.Lines.Add('通常');
end; |
等のようにすると、指定したファイルのあるフォルダの属性がメモに表示されます。が、これは Windowsのみ実行可能で、MacOSX の場合には、コンパイル時にエラーが発生します。 |
GetCreationTime
|
class function GetCreationTime(
const Path: string): TDateTime; static; |
ディレクトリの作成時刻を返します。
ディレクトリの作成時刻を取得するには、GetCreationTime を使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 作成時刻を取得しようとするディレクトリのパス。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、GetCreationTime は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST2';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
d := TDirectory.GetCreationTime(s);
Memo1.Lines.Add('生成日時:'+DateTimeToStr(d)); |
のようにすると、実行プログラムと同じフォルダ内の「TEST2」フォルダが生成された日時が表示されます。
|
GetCreationTimeUtc
|
class function GetCreationTimeUtc(
const Path: string): TDateTime; static; |
ディレクトリの作成時刻を UTC(Coordinated Universal Time:協定世界時)タイムゾーンで返します。
ディレクトリの作成時刻を UTC(Coordinated Universal Time:協定世界時)タイムゾーンで取得するには、GetCreationTimeUtc を使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 作成時刻を取得しようとするディレクトリのパス。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、GetCreationTimeUtc は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST2';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
d := TDirectory.GetCreationTimeUtc(s);
Memo1.Lines.Add('生成日時(UTC):'+DateTimeToStr(d)); |
のようにすると、実行プログラムと同じフォルダ内の「TEST2」フォルダが生成されたUTC日時が表示されます。
|
GetCurrentDirectory
|
class function GetCurrentDirectory: string;
inline; static; |
現在の作業ディレクトリを返します。
カレント ディレクトリを取得するには、GetCurrentDirectory を使用します。GetCurrentDirectory は、アプリケーションでカレントと見なされるディレクトリのパスを返します。 |
s := TDirectory.GetCurrentDirectory ;
Memo1.Lines.Add('【'+s+'】'); |
のようにすると、メモ内容は、
(Windows7の場合)
【C:\AFsoft\DelphiXE3\test\439\Win32\Release】 |
(MacOSXの場合) |
のようになります。
Windows7では、
「[dcc32 ヒント]インライン関数 'TDirectory.GetCurrentDirectory' はユニット 'Winapi.Windows' が USES リストで指定されていないため展開されません」と表示されます。実行時に例外は発生しません。
MacOSXでは、
「[dccosx ヒント] インライン関数 'TDirectory.GetCurrentDirectory' はユニット 'Posix.Unistd' が USES リストで指定されていないため展開されません」と表示され、なおかつ、実行時に例外が発生します。 |
GetDirectories
|
class function GetDirectories(
const Path: string): TStringDynArray;
class function GetDirectories(
const Path: string;
const Predicate: TFilterPredicate)
: TStringDynArray;
class function GetDirectories(
const Path, SearchPattern: string)
: TStringDynArray; overload; inline; static;
class function GetDirectories(
const Path, SearchPattern: string;
const Predicate: TFilterPredicate)
: TStringDynArray;
class function GetDirectories(
const Path, SearchPattern: string;
const SearchOption: TSearchOption)
: TStringDynArray; overload; static;
class function GetDirectories(
const Path, SearchPattern: string;
const SearchOption: TSearchOption;
const Predicate: TFilterPredicate)
: TStringDynArray; overload; static;
class function GetDirectories(
const Path: string;
const SearchOption: TSearchOption;
const Predicate: TFilterPredicate)
: TStringDynArray; overload; static; |
指定のディレクトリ内のサブディレクトリのリストを返します。
指定のディレクトリ内のサブディレクトリのリストを取得するには、GetDirectories を使用します。GetDirectories の戻り値は文字列の動的配列で、その配列の各要素にサブディレクトリの名前が格納されています。
GetDirectories メソッドには、以下の 3 つの形式があります。
・1 番目の形式は、サブディレクトリを列挙したいディレクトリのパスのみを受理します。
・2 番目の形式には、サブディレクトリ名に一致する検索パターンが含まれています。
・3 番目の形式には、列挙する際に再帰モードを使用するかどうかを指定するオプションが含まれています。
どの形式も、結果をフィルタリングするために使われる TFilterPredicate オプション パラメータを受理します。
次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | サブディレクトリを列挙しようとするディレイクトリのパス。 |
SearchPattern | ディレクトリ名との一致に使用するマスク(たとえば、"*app" は "app" で終わるすべてのディレクトリと一致します)。 |
SearchOption | ディレクトリの列挙モード。トップレベル列挙モードを使用するか、再帰列挙モードを使用するかを指定します。 |
Predicate | 望まない結果を除去するために使われるルーチン。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、GetDirectories は例外を発生させます。 |
TSearchOption
= (soTopDirectoryOnly, soAllDirectories); ディレクトリ構造をスキャンする際に使用可能な方法を列挙したものです。
TSearchOption は、ディレクトリ構造をスキャンする際に使用可能な方法を列挙したものです。TSearchOption は、TDirectory の一部のメソッドで、スキャン ルーチンが最上位ディレクトリのみ対象とするか他のすべてのディレクトリを再帰的に対象とするかを指定するのに使用されます。TSearchOption の取り得る値は以下のとおりです。
名前 | 意味 |
soTopDirectoryOnly | 最上位のファイルまたはディレクトリのみスキャンします。 |
soAllDirectories | 最上位のディレクトリまたはファイルを起点として、すべてのディレクトリやファイルを再帰的にスキャンします。 |
|
type TFilterPredicate = reference to function(
const Path: string,
const SearchRec: TSearchRec): Boolean;
ファイルの検索結果をフィルタリングする際に使われるメソッドの型を表します。
TFilterPredicate は、ディレクトリ走査のルーチンに渡すことができるメソッドを定義したものです。TFilterPredicate 型のメソッドは、単純なメソッド、または匿名プロシージャのいずれかです。次の表に、TFilterPredicate で使用されるパラメータのリストを示します。
名前 | 意味 |
Path | ファイルまたはディレクトリの場所を表す完全修飾パス。Path には、ファイルまたはディレクトリの名前は含まれません。 |
SearchRec | ファイルまたはディレクトリの情報を保持する TSearchRec 構造体。 |
|
s := ExtractFilePath(ParamStr(0));
l := TDirectory.GetDirectories(s);
for i := 0 to Length(l)-1 do
Memo1.Lines.Add(l[i]); |
のようにすると、メモ内容は、
(Windows7の場合)
C:\AFsoft\DelphiXE3\test\439\Win32\Release\TEST
C:\AFsoft\DelphiXE3\test\439\Win32\Release\TEST1
C:\AFsoft\DelphiXE3\test\439\Win32\Release\TEST2 |
(MacOSXの場合)
/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents/MacOS/TEST
/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents/MacOS/TEST1
/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents/MacOS/TEST2 |
のようになります。(実行プログラムと同じフォルダ内に、「TEST」「TEST1」「TEST2」の3つのフォルダがある場合) |
GetDirectoryRoot
|
class function GetDirectoryRoot(
const Path: string): string; static; |
指定のパスのルート ディレクトリを返します。
指定のパスのルート ディレクトリを取得するには、GetDirectoryRoot を使用します。相対パスは、アプリケーションの作業ディレクトリからの相対パスと見なされます。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | ルート ディレクトリを取得しようとするパス。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、GetDirectoryRoot は例外を発生させます。 |
s := ParamStr(0);
t := TDirectory.GetDirectoryRoot(s);
Memo1.Lines.Add('【'+s+'】');
Memo1.Lines.Add('【'+t+'】'); |
のようにすると、メモ内容は、
(Windows7の場合)
【C:\AFsoft\DelphiXE3\test\439\Win32\Release\p439.exe】
【C:\】 |
(MacOSXの場合)
【/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents/MacOS/p439】
【/】 |
のようになります。 |
GetFiles
|
class function GetFiles(const Path: string)
: TStringDynArray;
class function GetFiles(const Path: string;
const Predicate: TFilterPredicate): TStringDynArray;
class function GetFiles(
const Path, SearchPattern: string): TStringDynArray;
class function GetFiles(
const Path, SearchPattern: string;
const Predicate: TFilterPredicate): TStringDynArray;
class function GetFiles(
const Path, SearchPattern: string;
const SearchOption: TSearchOption): TStringDynArray;
overload; static;
class function GetFiles(
const Path, SearchPattern: string;
const SearchOption: TSearchOption;
const Predicate: TFilterPredicate): TStringDynArray;
overload; static;
class function GetFiles(const Path: string;
const SearchOption: TSearchOption;
const Predicate: TFilterPredicate): TStringDynArray;
overload; static; |
指定のディレクトリ内のファイルのリストを返します。
指定のディレクトリ内のファイルのリストを取得するには、GetFiles を使用します。GetFiles の戻り値は文字列の動的配列で、その配列の各要素にファイル名が格納されています。
GetFiles メソッドには、以下の 3 つの形式があります。
・1 番目の形式は、ファイルを列挙したいディレクトリのパスのみを受理します。
・2 番目の形式には、ファイル名に一致する検索パターンが含まれています。
・3 番目の形式には、列挙する際に再帰モードを使用するかどうかを指定するオプションが含まれています。
どの形式も、結果をフィルタリングするために使われる TFilterPredicate オプション パラメータを受理します。
次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | ファイルを列挙しようとするディレイクトリのパス。 |
SearchPattern | ファイル名との一致に使用するマスク(たとえば、"*.exe" はすべての実行可能ファイルと一致します)。 |
SearchOption | ディレクトリの列挙モード。トップレベル列挙モードを使用するか、再帰列挙モードを使用するかを指定します。 |
Predicate | 望まない結果を除去するために使われるルーチン。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、GetFiles は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0));
l := TDirectory.GetFiles(s);
for i := 0 to Length(l)-1 do
Memo1.Lines.Add(l[i]); |
のようにすると、メモ内容は、
(Windows7の場合)
C:\AFsoft\DelphiXE3\test\439\Win32\Release\p439.exe
C:\AFsoft\DelphiXE3\test\439\Win32\Release\Unit1.dcu |
(MacOSXの場合)
/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents/MacOS/libcgunwind.1.0.dylib
/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents/MacOS/p439 |
のようになります。実行プログラムと同じフォルダ内に、サブフォルダがあってもフォルダ名は取得しません。 |
GetFileSystemEntries
|
class function GetFileSystemEntries(
const Path: string): TStringDynArray;
class function GetFileSystemEntries(
const Path: string;
const Predicate: TFilterPredicate)
: TStringDynArray;
class function GetFileSystemEntries(
const Path, SearchPattern: string)
: TStringDynArray; overload; static;
class function GetFileSystemEntries(
const Path, SearchPattern: string;
const Predicate: TFilterPredicate)
: TStringDynArray; overload; static;
class function GetFileSystemEntries(
const Path: string;
const SearchOption: TSearchOption;
const Predicate: TFilterPredicate)
: TStringDynArray; overload; static; |
指定のディレクトリ内のファイルとサブディレクトリのリストを返します。
指定のディレクトリ内のファイルとサブディレクトリのリストを取得するには、GetFileSystemEntries を使用します。GetFileSystemEntries の戻り値は文字列の動的配列で、その配列の各要素にファイルまたはサブディレクトリの名前が格納されています。
GetFileSystemEntries メソッドには、以下の 3 つの形式があります。
1 番目の形式は、ファイルとサブディレクトリを列挙したいディレクトリのパスのみを受理します。
2 番目の形式には、サブディレクトリ名に一致する検索パターンが含まれています。
どの形式も、結果をフィルタリングするために使われる TFilterPredicate オプション パラメータを受理します。
次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | サブディレクトリを列挙しようとするディレイクトリのパス。 |
SearchPattern | ディレクトリ名との一致に使用するマスク(たとえば、"*app" は "app" で終わるすべてのファイルとディレクトリに一致します) |
Predicate | 望まない結果を除去するために使われるルーチン。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、GetFileSystemEntries は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0));
l := TDirectory.GetFileSystemEntries(s);
for i := 0 to Length(l)-1 do
Memo1.Lines.Add(l[i]); |
のようにすると、メモ内容は、
(Windows7の場合)
C:\AFsoft\DelphiXE3\test\439\Win32\Release\p439.exe
C:\AFsoft\DelphiXE3\test\439\Win32\Release\TEST
C:\AFsoft\DelphiXE3\test\439\Win32\Release\TEST1
C:\AFsoft\DelphiXE3\test\439\Win32\Release\TEST2
C:\AFsoft\DelphiXE3\test\439\Win32\Release\Unit1.dcu |
(MacOSXの場合)
/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents/MacOS/libcgunwind.1.0.dylib
/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents/MacOS/p439
/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents/MacOS/TEST
/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents/MacOS/TEST1
/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents/MacOS/TEST2 |
のようになります。フォルダ名とファイル名の両方を取得します。 |
GetLastAccessTime
|
class function GetLastAccessTime(
const Path: string): TDateTime; static; |
ディレクトリの最終アクセス時刻を返します。
ディレクトリの最終アクセス時刻を取得するには、GetLastAccessTime を使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 最終アクセス時刻を取得しようとするディレクトリのパス。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、GetLastAccessTime は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
d := TDirectory.GetLastAccessTime(s);
Memo1.Lines.Add('最終アクセス日時:'+DateTimeToStr(d)); |
のようにすると、実行プログラムと同じフォルダ内の「TEST」フォルダがアクセスされた最終日時が表示されます。
最終アクセス日時:2014/07/02 3:00:00 |
|
GetLastAccessTimeUtc
|
class function GetLastAccessTimeUtc(
const Path: string): TDateTime; static; |
ディレクトリの最終アクセス時刻を UTC(Coordinated Universal Time:協定世界時)タイムゾーンで返します。
ディレクトリの最終アクセス時刻を UTC(Coordinated Universal Time:協定世界時)タイムゾーンで取得するには、GetLastAccessTimeUtc を使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 最終アクセス時刻を取得しようとするディレクトリのパス。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、GetLastAccessTimeUtc は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
d := TDirectory.GetLastAccessTimeUtc(s);
Memo1.Lines.Add('最終アクセス日時(UTC):'+DateTimeToStr(d)); |
のようにすると、実行プログラムと同じフォルダ内の「TEST」フォルダがアクセスされた最終UTC日時が表示されます。
最終アクセス日時(UTC):2014/07/01 18:00:00 |
|
GetLastWriteTime
|
class function GetLastWriteTime(
const Path: string): TDateTime; static; |
ディレクトリの最終書き込み時刻を返します。
ディレクトリの最終書き込み時刻を取得するには、GetLastWriteTime を使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 最終書き込み時刻を取得しようとするディレクトリのパス。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、GetLastWriteTime は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
d := TDirectory.GetLastWriteTime(s);
Memo1.Lines.Add('最終書き込み日時:'+DateTimeToStr(d)); |
のようにすると、実行プログラムと同じフォルダ内の「TEST」フォルダに書き込みがあった最終日時が表示されます。
最終書き込み日時:2014/07/02 3:00:00 |
ちなみに、最終アクセス日時との違いがイマイチ分かりません。 |
GetLastWriteTimeUtc
|
class function GetLastWriteTimeUtc(
const Path: string): TDateTime; static; |
ディレクトリの最終書き込み時刻を UTC(Coordinated Universal Time:協定世界時)タイムゾーンで返します。
ディレクトリの最終書き込み時刻を UTC(Coordinated Universal Time:協定世界時)タイムゾーンで取得するには、GetLastWriteTimeUtc を使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 最終書き込み時刻を取得しようとするディレクトリのパス。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、GetLastWriteTimeUtc は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
d := TDirectory.GetLastWriteTimeUtc(s);
Memo1.Lines.Add('最終書き込み日時(UTC):'+DateTimeToStr(d)); |
のようにすると、実行プログラムと同じフォルダ内の「TEST」フォルダに書き込みがあった最終UTC日時が表示されます。
最終書き込み日時(UTC):2014/07/02 3:00:00 |
|
GetLogicalDrives
|
class function GetLogicalDrives
: TStringDynArray; static; |
このコンピュータ上に存在するすべての論理ドライブのリストを返します。
このコンピュータ上に存在するすべての論理ドライブのリストを取得するには、GetLogicalDrives を使用します。GetLogicalDrives は文字列の動的配列を返します。この配列の各要素は、論理ドライブを表す文字です。 |
l := TDirectory.GetLogicalDrives;
for i := 0 to Length(l)-1 do
Memo1.Lines.Add(l[i]); |
のようにすると、メモ内容は、
(Windows7の場合)
C:\
D:\
F:\
G:\ |
(MacOSXの場合) |
のようになります。MacOSXの場合は何も表示されません。「ドライブ名」という概念が無いからでしょう。 |
GetParent
|
class function GetParent(const Path: string)
: string; static; |
あるディレクトリの親ディレクトリを返します。
指定のパスの親ディレクトリを取得するには、GetParent を使用します。相対パスは、アプリケーションの作業ディレクトリからの相対パスと見なされます。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 親ディレクトリを取得しようとするパス。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、GetParent は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0));
s := Copy(s,1,Length(s)-1);
t := TDirectory.GetParent(s);
Memo1.Lines.Add('【'+s+'】');
Memo1.Lines.Add('【'+t+'】'); |
のようにすると、メモ内容は、
(Windows7の場合)
【C:\AFsoft\DelphiXE3\test\439\Win32\Release】
【C:\AFsoft\DelphiXE3\test\439\Win32】 |
(MacOSXの場合)
【/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents/MacOS】
【/Users/user/Applications/Embarcadero/RADPAServer/10.0/scratch-dir/AFsoft-test/p439.app/Contents】 |
のようになります。MacOSXではなりませんが、Windowsの場合は、パス名の最後が「\」になっていると親フォルダを取得出来ません。そのため1文字減らす=最後の「\」を消すようにしています。 |
IsEmpty
|
class function IsEmpty(const Path: string)
: Boolean; static; |
指定のディレクトリが空かどうかをチェックします。
指定のディレクトリが空かどうかをチェックするには、IsEmpty を呼び出します。空のディレクトリとは、ファイルやその他のディレクトリを含まないディレクトリのことです。ディレクトリが空の場合、IsEmpty は true を返します。それ以外の場合は false を返します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | チェックしようとするディレクトリのパス。 |
メモ: Path パラメータが空文字列の場合、IsEmpty は false を返します。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if (TDirectory.Exists(s)) then
if (TDirectory.IsEmpty(s)) then
Memo1.Lines.Add('フォルダ「TEST」内は空です。')
else
Memo1.Lines.Add('フォルダ「TEST」内は空ではありません。')
else
Memo1.Lines.Add('フォルダ「TEST」は存在しません'); |
のようにすると、メモ内容は、
のようになります。 |
IsRelativePath
|
class function IsRelativePath(
const Path: string): Boolean; inline; static; |
IsRelativePath は、指定したパスが相対パスかどうかを示します。
IsRelativePath メソッドは、指定したパスが相対パスの場合に True を返し、それ以外の場合は False を返します。 |
s := 'abcdef.ghi';
f := TDirectory.IsRelativePath(s);
Memo1.Lines.Add(BoolToStr(f));
s := 'c:\XYZ\abcdef.ghi';
f := TDirectory.IsRelativePath(s);
Memo1.Lines.Add(BoolToStr(f));
s := '/Users/user/abcdef.ghi';
f := TDirectory.IsRelativePath(s);
Memo1.Lines.Add(BoolToStr(f)); |
のようにすると、メモ内容は、
(Windows7の場合)
-1
0
-1 |
(MacOSXの場合)
-1
-1
0 |
のようになります。 |
Move
|
class procedure Move(
const SourceDirName, DestDirName: string); static; |
ディレクトリとその内容を移動または名前変更します。
ディレクトリとその内容を、指定のパスから別のパスに移動または名前変更するには、Move を使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
SourceDirName | 移動元となるディレクトリのパス。 |
DestDirName | 移動先となるディレクトリのパス。 |
メモ: 指定のパスが無効または存在しないか、アクセス不能の場合、Move は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST3';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
Memo1.Lines.Clear ;
Memo1.Lines.Add('TEST3');
Memo1.Lines.SaveToFile(s+'/TEST.TXT');
t := ExtractFilePath(ParamStr(0))+'TEST4';
TDirectory.Move(s,t); |
のようにすると、実行プログラムと同じフォルダ内に、「TEST3」フォルダを作成し、その中にファイル「TEST.TXT」を作成し、この Moveメソッドで、TEST3フォルダを中身ごと TEST4 フォルダとして移動出来る事が確認出来ます。(Windows7、MacOSXで確認)
フォルダ名の最後に「/」があっても大丈夫な様子です。
サブフォルダがあっても丸ごと移動される様子です。 |
SetAttributes
|
class procedure SetAttributes(
const Path: string;
const Attributes: TFileAttributes);
inline; static; |
ディレクトリ属性を設定します。
指定のディレクトリに新しい属性セットを適用するには、SetAttributes を呼び出します。
このメソッドに必要なパラメータの一覧を以下の表に示します。
名前 | 意味 |
パス | 属性を取得するするディレクトリのパス。 |
属性 | ディレクトリに適用する新しい属性セット。 |
メモ: ディレクトリにアクセスできない場合やパスが無効な場合には、SetAttributes は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST3';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
TDirectory.SetAttributes(s,
[System.IOUtils.TFileAttribute.faHidden]); |
のようにすると、Windows7の場合は、プログラムと同じフォルダ内に、フォルダ「TEST3」が無ければ作成し、フォルダ「TEST3」の属性を、隠しファイルにします。
MacOSX の場合は、コンパイル時にエラーが出て、プログラムを作成する事は出来ません。 |
SetCreationTime
|
class procedure SetCreationTime(
const Path: string;
const CreationTime: TDateTime); static; |
ディレクトリの作成時刻を変更します。
ディレクトリの作成時刻を変更するには、SetCreationTime を使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 作成時刻を変更しようとするディレクトリのパス。 |
CreationTime | ディレクトリに適用しようとする新しい作成時刻。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、SetCreationTime は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
d := StrToDateTime('00/03/01 10:20:30');
TDirectory.SetCreationTime(s,d); |
のようにすると、実行プログラムと同じフォルダ内にある「TEST」フォルダの生成日時を変更している、つもりですが、Windows、MacOSXともに、反応無しのようです。 |
SetCreationTimeUtc
|
class procedure SetCreationTimeUtc(
const Path: string;
const CreationTime: TDateTime); static; |
ディレクトリの作成時刻を変更します。
ディレクトリの作成時刻を変更するには、SetCreationTimeUtc を使用します。新しい日時 はUTC(Coordinated Universal Time:協定世界時)であると見なされます。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 作成時刻を変更しようとするディレクトリのパス。 |
CreationTime | ディレクトリに適用しようとする新しい作成時刻。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、SetCreationTimeUtc は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
d := StrToDateTime('00/03/01 10:20:30');
TDirectory.SetCreationTimeUtc(s,d); |
のようにすると、実行プログラムと同じフォルダ内にある「TEST」フォルダの生成日時を変更している、つもりですが、Windows、MacOSXともに、反応無しのようです。 |
SetCurrentDirectory
|
class procedure SetCurrentDirectory(
const Path: string); static; |
カレント ディレクトリを設定します。
現在の作業ディレクトリを設定するには、SetCurrentDirectory を使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | カレントに設定しようとするディレクトリのパス。 |
メモ: 指定のパスが無効であるか、またはカレントに設定できない場合、SetCurrentDirectory は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
TDirectory.SetCurrentDirectory(s);
s := '-';
try
s := TDirectory.GetCurrentDirectory ;
except
;
end;
Memo1.Lines.Add('【'+s+'】'); |
のようにすると、メモ内容は、
(Windows7の場合)
【C:\AFsoft\DelphiXE3\test\439\Win32\Release\TEST】 |
(MacOSXの場合)
【-】 |
のようになります。MacOSXでは、動作しているのかどうか不明です。カレントディレクトリの取得は出来ませんから、このルーチンも使用しない方が無難だと思われます。 |
SetLastAccessTime
|
class procedure SetLastAccessTime(
const Path: string;
const LastAccessTime: TDateTime); static; |
ディレクトリの最終アクセス時刻を変更します。
ディレクトリの最終アクセス時刻を変更するには、SetLastAccessTime を使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 最終アクセス時刻を変更しようとするディレクトリのパス。 |
LastAccessTime | ディレクトリに適用しようとする新しい最終アクセス時刻。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、SetLastAccessTime は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
d := StrToDateTime('00/03/01 10:20:30');
TDirectory.SetLastAccessTime(s,d); |
のようにすると、実行プログラムと同じフォルダ内にある「TEST」フォルダの最終アクセス日時を変更している、つもりですが、MacOSXでは動作出来ている様子ですが、Windows7では 反応無しのようです。 |
SetLastAccessTimeUtc
|
class procedure SetLastAccessTimeUtc(
const Path: string;
const LastAccessTime: TDateTime); static; |
ディレクトリの最終アクセス時刻を変更します。
ディレクトリの最終アクセス時刻を変更するには、SetLastAccessTimeUtc を使用します。新しい日時 はUTC(Coordinated Universal Time:協定世界時)であると見なされます。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 最終アクセス時刻を変更しようとするディレクトリのパス。 |
LastAccessTime | ディレクトリに適用しようとする新しい最終アクセス時刻。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、SetLastAccessTimeUtc は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
d := StrToDateTime('00/03/01 10:20:30');
TDirectory.SetLastAccessTimeUtc(s,d); |
のようにすると、実行プログラムと同じフォルダ内にある「TEST」フォルダの最終アクセスUTC日時を変更している、つもりですが、MacOSXでは動作出来ている様子ですが、Windows7では 反応無しのようです。 |
SetLastWriteTime
|
class procedure SetLastWriteTime(
const Path: string;
const LastWriteTime: TDateTime); static; |
ディレクトリの最終書き込み時刻を変更します。
ディレクトリの最終書き込み時刻を変更するには、SetLastWriteTime を使用します。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 最終書き込み時刻を変更しようとするディレクトリのパス。 |
LastWriteTime | ディレクトリに適用しようとする新しい最終書き込み時刻。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、SetLastWriteTime は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
d := StrToDateTime('00/03/01 10:20:30');
TDirectory.SetLastWriteTime(s,d); |
のようにすると、実行プログラムと同じフォルダ内にある「TEST」フォルダの最終書き込み日時を変更している、つもりですが、MacOSXでは動作出来ている様子ですが、Windows7では 反応無しのようです。 |
SetLastWriteTimeUtc |
class procedure SetLastWriteTimeUtc(
const Path: string;
const LastWriteTime: TDateTime); static; |
ディレクトリの最終書き込み時刻を変更します。
ディレクトリの最終書き込み時刻を変更するには、SetLastWriteTimeUtc を使用します。新しい日時 はUTC(Coordinated Universal Time:協定世界時)であると見なされます。次の表に、このメソッドのパラメータ リストを示します。
名前 | 意味 |
Path | 最終書き込み時刻を変更しようとするディレクトリのパス。 |
LastWriteTime | ディレクトリに適用しようとする新しい最終書き込み時刻。 |
メモ: 指定のパスが無効であるか、またはそのディレクトリが存在しない場合、SetLastWriteTimeUtc は例外を発生させます。 |
s := ExtractFilePath(ParamStr(0))+'TEST';
if not(TDirectory.Exists(s)) then
TDirectory.CreateDirectory(s);
d := StrToDateTime('00/03/01 10:20:30');
TDirectory.SetLastWriteTimeUtc(s,d); |
のようにすると、実行プログラムと同じフォルダ内にある「TEST」フォルダの最終書き込みUTC日時を変更している、つもりですが、MacOSXでは動作出来ている様子ですが、Windows7では 反応無しのようです。 |
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Dehi入門編
>Delphi2010
>DelphiXE3
▲2014/06/28
2014/07/04
▼2014/07/10
シェアウェア
Script!World
データベース
|