パス指定先に特殊ディレクトリのパスを対象にさせるには

解決


SOON  2010-02-11 04:49:48  No: 146743

IO.File.delete(パス)

IO.Directory.Delete(パス)
などのパス指定先に
System.Environment.GetFolderPath(Environment.SpecialFolder.InternetCache)
インターネットキャッシュなどの
特殊ディレクトリなどのパスを指定するやり方をおしえてください。

ためしに
IO.Directory.Delete(System.Environment.GetFolderPath(Environment.SpecialFolder.InternetCache))
こんな漢字にやってみましたがうまくいきませんでした。


YuO  2010-02-11 05:34:05  No: 146744

> こんな漢字にやってみましたがうまくいきませんでした。
「うまくいかなかった」とはどういうことでしょうか。
おそらく例外が発生したのだと思いますが,例外が発生した時の例外に含まれる情報 (型含む) は,非常に重要な情報源です。

今回の場合だと,
MSDN: Directory.Delete メソッド (String) (System.IO)
http://msdn.microsoft.com/ja-jp/library/62t64db3.aspx

> 指定したパスから空のディレクトリを削除します。
と書いてある通り,ディレクトリを削除できるのはディレクトリが空の場合に限ります。
InternetCacheディレクトリはおそらく空ではないでしょうから,削除に失敗したのでしょう。

とりあえず,Directory.Deleteのオーバーロード
MSDN: Directory.Delete メソッド (String, Boolean) (System.IO)
http://msdn.microsoft.com/ja-jp/library/fxeahc5f.aspx
を使えば空でなくても削除できます。
もちろん,他のプロセスが開いている等で削除できないファイルorディレクトリがあれば削除できませんが。

ところで,InternetCacheディレクトリを削除するのは非常に問題があると思われます。
MSDN: Directory.GetDirectories メソッド (String) (System.IO)
http://msdn.microsoft.com/ja-jp/library/c1sez4sc.aspx
で全てのサブディレクトリを列挙して削除したり,
MSDN: Directory.GetFiles メソッド (System.IO)
http://msdn.microsoft.com/ja-jp/library/system.io.directory.getfiles.aspx
で全てのファイルを列挙して削除するようにして,InternetCacheディレクトリ自体を削除しないようにする方がよいでしょう。

正攻法としては,
MSDN: FindFirstUrlCacheEntry Function (Windows)
http://msdn.microsoft.com/en-us/library/aa384026.aspx
などのWinInet APIを使ってキャッシュをクリアする事でしょうけれど……。


魔界の仮面弁士  2010-02-11 06:46:27  No: 146745

目的が「インターネット一時ファイル」のクリアなら、
ClearMyTracksByProcess を利用する事もできます。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+201002/10020013.txt

FindFirstUrlCacheEntry の方のサンプルとしては、このあたりに。
http://tinyurl.com/FindFirstUrlCacheEntry
http://support.microsoft.com/kb/326201/ja


SOON  2010-02-11 06:53:19  No: 146746

回答ありがとうござます

 Dim stPrompt As String = String.Empt

        System.IO.File.Delete("ここの場所")

このような場合に

stPromptがある複数のファイルのパスを指定している場合にて

そのstpromptをすべて除去したいのですが

Dimで宣言した変数を指定する場合

単刀直入に  System.IO.File.Delete("stPrompt")

これでいいのでしょうか?

キャッシュファイルだと大変そうなのでクッキーファイルの中身除去の
コードです。
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim UserName As String
        UserName = SystemInformation.UserName

        ' 必要な変数を宣言する
        Dim stPrompt As String = String.Empty

        ' 拡張子が .txt のファイルを列挙する
        For Each stFilePath As String In System.IO.Directory.GetFiles("C:\Documents and Settings\" & UserName & "\Cookies", "*.txt")
            stPrompt &= stFilePath & System.Environment.NewLine
        Next stFilePath

↑ここで、フォルダ内のファイルを探しあてます。

        System.IO.File.Delete("stPrompt")

↑ここで探しあてたファイルをすべて除去

何か違ってることがありましたらご教授ください!!
お願いします!

    End Sub


YuO  2010-02-11 07:22:23  No: 146747

一気に削除ではなく,一個一個削除していきます。
なので,For Eachの中でFile.Deleteする必要があります。
つまりは,
File.Delete(stFilePath)
がFor Eachの中身になります。

あと,
>         System.IO.File.Delete("stPrompt")
stPrompt変数に含まれるファイルを指定したい場合は,こうではなく
System.IO.File.Delete(stPrompt)
と,二重引用符で囲わずに書く必要があります。
# stPromptを指定すると改行コードが入ったりしているので例外が発生すると思いますが。


SOON  2010-02-11 07:58:02  No: 146748

YuOさん回答ありがとうございます
見事に解決できました感謝です。
本当にありがとうございました!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加