喫茶XRAYトップページ

[スレッド全体
]

[5661] DirectoryExistsの動作について返信 削除
2012/1/21 (土) 23:55:18 Sara
みなさん、こんばんは

USBカードリーダーにメモリーカードが入っている状態で、そのカードに対して
ファイル等の操作を行いプログラムを終了します。
(たとえば、デジカメで撮った写真などを閲覧して終了する)
(プログラムは前回の終了時のフォルダーを記憶しているものとします。)

その後、メモリカードをカードリーダーから抜いた状態でプログラム起動して
前回終了時に操作していたフォルダーに対してDirectoryExistsを実行すると、
メモリカードがないにも関わらず、Trueを返してきます・・・なぜ?
(I:\DCIM\100MEDIAなど)

もちろん、HDDに対して操作した後で、操作していたフォルダーを削除した後に
プログラムを再起動してDirectoryExistsを実行するとFalseを返します。

どこかで、キャッシュをフラッシュするような操作をしないとだめなんでしょうか?

お解りになる方、御教示いただきたくm(_ _)m

[5667] Re:DirectoryExistsの動作について返信 削除
2012/1/23 (月) 19:15:40 Syake
▼ Saraさん
> みなさん、こんばんは
>
> USBカードリーダーにメモリーカード

はここに無いので試していませんが
USBメモリー等でファイル操作、ディレクトリ削除、USBメ
モリの抜き差し、プログラムの再起動など、組み合わせで
いろいろ試しましたが、今のところ期待した動作のようで
す。

全く参考になりませんが、当方はこんな状態です。m(_ _)m
 
Win7Pro Del.XE


[5669] Re2:DirectoryExistsの動作について返信 削除
2012/1/23 (月) 21:24:12 Mr.XRAY
こんなコードで簡単なテストしてみましたが,

procedure TForm1.Button1Click(Sender: TObject);
var
  ADir : String;
begin
  ADir := 'L:\AAA';
  if SysUtils.DirectoryExists(ADir, True) then begin
    ShowMessage('AAAAA');
  end;
end;

L:\AAA 内のファイルを表示したりして,閉じて,USBを抜いて実行
しましたが,ShowMessageは表示されませんでした.
Windows XP(SP3) + Delphi XE です.

SysUtils.DirectoryExists
http://docwiki.embarcadero.com/VCL/ja/SysUtils.DirectoryExists

やっぱキャッシュ関係なのかな?


[5672] Re3:DirectoryExistsの動作について返信 削除
2012/1/23 (月) 22:05:45 Sara
▼ Mr.XRAYさん

ご苦労様です。m(_ _)m

> L:\AAA 内のファイルを表示したりして,閉じて,USBを抜いて実行
> しましたが,ShowMessageは表示されませんでした.
> Windows XP(SP3) + Delphi XE です.
>
> SysUtils.DirectoryExists
> http://docwiki.embarcadero.com/VCL/ja/SysUtils.DirectoryExists
>
> やっぱキャッシュ関係なのかな?


USBメモリだと大丈夫でしょうね・・・(試していないけど・・・)

問題なのは、カードリーダーにメモリカードを刺した状態でテストした後に、
メモリカードのみを抜いて実行すると、カードリーダーは存在しているので、
ドライブレターがそのまま残っているところに問題があるんでしょう・・・
FDDと同じような状況だけど、FDDでも起きるのかな・・・
(FDD無いから試せないけど・・・)

あぁ、そうだ DVD-RAMで試してみよう・・・

   *** 実験中 ***

DVD-RAMにフォルダーを1つ作って画像を数枚いれて実行した後に、
メディアをイジェクトして再度実行したら・・・
同じ状況になった・・・

やはり、どこかでキャッシュをクリアする必要があるようだ・・・
でも、どうやって?



[5673] Re4:DirectoryExistsの動作について返信 削除
2012/1/23 (月) 22:53:11 Sara
みなさん こんばんは。

ちょっと、関数をこしらえてみました。

function FolderExists(Value : String):Boolean;
var
  P: PWideChar;
  NewPIDL: PItemIDList;
  Flags,
  NumChars: LongWord;
  sf : IShellFolder;
begin
  Result := False;
  NumChars := Length(Value);
  Flags := 0;
  P := StringToOleStr(Value);
  try
    SHGetDesktopFolder(sf);
    Result := Succeeded(sf.ParseDisplayName(0, nil, P, NumChars, NewPIDL, Flags));
  except
    on EOleSysError do exit;
  end;
end;

これなら、期待どおりの動作をするようですが、どうなんでしょう?

やっていることに問題がなければ、こちらを使おうかと・・・

添削をお願いいたします。m(_ _)m

[5674] Re5:DirectoryExistsの動作について返信 削除
2012/1/23 (月) 23:00:38 Mr.XRAY
▼ Saraさん

なるほど,項目識別子というわけですか.
Saraさんの常用バージョンって,Delphi 2010でしたっけ.
常連さんのバージョンを把握しきれていない! スンマセン.


[5675] Re6:DirectoryExistsの動作について返信 削除
2012/1/23 (月) 23:17:14 Sara
▼ Mr.XRAYさん
 
> なるほど,項目識別子というわけですか.
> Saraさんの常用バージョンって,Delphi 2010でしたっけ.
> 常連さんのバージョンを把握しきれていない! スンマセン.


おっと 失礼しました。

環境を書くのをすっかり失念していましたね・・・(^^;

Windows7 64Bit + Delphi XE2がデフォルトです。

たまにWindowsXP + Delphi2007のときもあります・・・

[5676] Re7:DirectoryExistsの動作について返信 削除
2012/1/24 (火) 00:26:30 Mr.XRAY
▼ Saraさん

> 環境を書くのをすっかり失念していましたね・・・(^^;

いえ,別に関係ないんですけど.(^^;

> Windows7 64Bit + Delphi XE2がデフォルトです。

えっ,何時の間に...
コードですけど,ちょっと気になるところがあったので,後で確認させて
ください.
動作には関係ないことなんですが...


[5678] Re8:DirectoryExistsの動作について返信 削除
2012/1/24 (火) 09:08:58 Sara
▼ Mr.XRAYさん

> > Windows7 64Bit + Delphi XE2がデフォルトです。
>
> えっ,何時の間に...


ん? [5328] XE2 バージョン情報の取得にて
のあたりからですが?(^^;

> コードですけど,ちょっと気になるところがあったので,後で確認させて
> ください.
> 動作には関係ないことなんですが...


お手数をおかけします。m(_ _)m

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82