今日のレイモンド・チェンのブログエントリは、私が抱えている問題のエレガントな解決策に気づきました。
すべての構造をとるのではなく、さまざまなシェルITEMIDLIST関数を次のものだけを受け入れるようにすることができます。
ITEMID_CHILDIDLIST_RELATIVEIDLIST_ABSOLUTEITEMID_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で終了する場合に限ります。