今日のレイモンド・チェンのブログエントリは、私が抱えている問題のエレガントな解決策に気づきました。
すべての構造をとるのではなく、さまざまなシェルITEMIDLIST
関数を次のものだけを受け入れるようにすることができます。
ITEMID_CHILD
IDLIST_RELATIVE
IDLIST_ABSOLUTE
ITEMID_CHILD_ARRAY
構造。構造はすべて同じですが、コンパイラレベルで概念型を適用できるようになりました。
Delphiに戻る
私は一連の機能を持っています:
- いくつかは道をたどるだけです:(例
C:\Users\Ian\Desktop\AllisonAngel.jpg
) - 一部はファイル名のみを取ります:(例
AllisonAngel.jpg
) - いくつかはフォルダを取るだけです:(例
C:\Users\Ian\Desktop
)
そして今、それらはすべてstring
、例えば:として宣言されています。
function GetFilenames(Folder: string; ...): ...
function IsValidBatchFilename(Path: string): ...
function GetReportType(Filename: string): ...
そして、私は正しいものを渡していると信じなければなりません。そして私は開発者(例えば私)が次の違いを知っていると信じています:
- パス_
- ファイル名
- とフォルダ
「型付き」文字列を使用するように関数を変更したい:
function GetFilenames(Folder: TFolderOnly; ...): ...
function IsValidBatchFilename(Path: TFullPath): ...
function GetReportType(Filename: TFilenameOnly): ...
どこ:
type
TFullPath = type string;
TFolderOnly = type string;
TFilenameOnly = type string;
実際のタイピングが行われないことを除いて:
var
dropFolder: string;
begin
dropFolder := GetDropFolderPath(LCT);
GetFilenames(dropFolder); <-- no compile error
end;
私が欲しいのは「異なる」タイプの文字列です。つまりstring
、長さのプレフィックスが付けられ、参照カウントされ、nullで終了する場合に限ります。