1

私は決してプログラマーではありませんが、現在、Windows が名前を付ける一時ファイルをアプリケーションが作成するかどうか疑問に思っています。たとえば、作成するファイルは tmp001 です。その名前 tmp001 を使用して、作成する前に作成する次の一時ファイルを Windows に提供するように依頼する方法はありますか。

ありがとう、

マイク

4

4 に答える 4

3

次に作成される一時ファイル名を直接知る方法はありません。

たとえば、プログラマーはこのSystem.IO.Path.GetTempFileName方法を使用しますが、アプリケーションが新しく作成されたファイルを見つけやすくするために、アプリケーション固有のプレフィックスまたはサフィックスを追加できます。

この一時ファイルをシステムの一時フォルダー以外の場所に保存することもできます。

于 2010-05-27T14:40:20.267 に答える
1

この質問に「はい」と答えるには、「一時ファイル」をより明示的に定義する必要があります。問題は、「一時ファイル」が保持されることを意図していないことです。システムのどこにでも存在し、ユーザー、アプリケーション、またはサービスによって作成される可能性があります。これにより、質問に「はい」と答えることがほぼ (または実際には) 不可能になります。

一時ファイルの定義を公式の一時フォルダー (またはサブフォルダー) 内のファイルのみに制限する場合、Windows によって生成されていない名前を取得しようとすると、まだ問題があります。どのアプリでも、Windows が気にせずに、特定の名前の一時ファイルをそのフォルダーに作成できます。

Windows によって名前が付けられたファイルのみに定義をさらに制限すると、どこかに到達できる可能性があります。しかし、それは本当にあなたのニーズを満たしていますか?

結局のところ、解決しようとしている問題を説明したほうがよいかもしれません。この問題に対処する、より優れた (実行可能な) 解決策があるかもしれません。

于 2010-05-27T14:37:02.320 に答える
1

通常、アプリケーションは Win32 API GetTempFileNameを使用して一時ディレクトリを取得します。一時ファイルが生成されるプロセスについては、そこに記載されています。

この情報が必要な理由はわかりませんが、たとえば、ReadDirectoryChangesWなどの Win32 API を介して、またはミニ フィルター ドライバーを使用して、ディレクトリの変更を登録することができます。

于 2010-05-27T14:32:23.060 に答える
0

この種のコードは、マルチタスクオペレーティングシステムでは確実に機能しません。別のプロセスの別のスレッドがあなたのスレッドを横取りし、作成したいファイル名を要求する可能性があります。

それ以外の場合、これは回避するのに十分簡単です。Windowsに依存するのではなく、独自のファイルに名前を付けるだけです。AppDataフォルダーでこれを行うと、別のプロセスがそれを台無しにするリスクを最小限に抑えることができます。

于 2010-05-27T16:24:24.040 に答える