0

私は単純なVB.netアプリケーションを作成しています。これは基本的にユーザーに複数のファイルを要求し、後で選択したファイルにアクセスしてそれらを変更する必要があります。

現在、選択したファイルのフルパスを保存しています。将来的には、アプリケーションは各パスを繰り返し処理し、そのようなパスからファイルを開いて変更します。

それに関する問題は、ユーザーがファイルを選択して(フルパスが保存されるように)、アプリケーションがファイルを変更する前にファイルを削除または移動できることです。

通常は「ファイルが見つかりません」というエラーが表示されますが、「プログラムが使用していた」ためにファイルの削除/移動/名前変更を禁止する機能がWindowsにあるという印象を受けます。私のアプリケーションにより適した機能です。

私はVB.NETにあまり精通していませんが、アプリケーションを使用して(IOを使用して)ファイルを「開く」と、前述の機能が実際にトリガーされ、ユーザーはファイルを変更できなくなると思います。それは私のアプリケーションによって「開かれる」からです。

しかし、私の唯一の望みはファイルを「予約」することなので、(まだ)本当に必要がないときに実際にファイルを開くのはかなり無駄に思えます。Windowsに特定のファイルをそのままにしておく必要があることを伝える方法はありますか?

4

2 に答える 2

2

簡単な解決策があります。各ファイルを排他モードで開きます。次のようになります。

Sub test()
    Dim FS = System.IO.File.Open("path", IO.FileMode.Open, IO.FileAccess.ReadWrite, IO.FileShare.None)
End Sub

ただし、注意してください: ファイル ハンドルを開いています。ファイルを閉じるコードがアプリケーションを終了せずに失敗した場合、アプリケーション ファイルは非常に長い間ロックされたままになります (アプリがシャットダウンするまで)。using 句または try/catch/finally 句を使用できます。私はあなたのプログラムについて誰にも勧められるほど詳しく知りません。

于 2013-03-06T08:30:43.863 に答える
2

ファイルを開く (希望する共有モードを指定して) ことが、その方法です。

複数のファイルを開くことに実際に問題があるとは思いません (また、リムーバブル ドライブの削除などの場合は何もできません)。昔はプロセスごとに開くファイルの数に制限がありましたが、もはや実用的な制限ではありません - Pushing the Limits of Windows: Handles

于 2013-03-06T08:25:46.773 に答える