15

重複の可能性:
一時フォルダーの作成

Pythonのモジュールのようなものを探していtempfileます: A (できれば) 書き込み用にファイルを開くための安全な方法。これも終わったら簡単に削除できるはずです...

tempfile.NETには、ファイルを作成するだけでなく、パスとともにファイル記述子(古い学校、私が知っている...)を返すモジュールの「バッテリーを含む」機能がないようです。同時に、作成ユーザーのみがファイルなどにアクセスできるようにします(mkstemp()私は思う): https://docs.python.org/library/tempfile.html


あ、はい、わかります。ただし、GetTempFileName には欠点があります。ファイルが作成されたとき (GetTempFileName の呼び出し時に 0 バイトのファイルが作成される) と、ファイルを開くとき (GetTempFileName が返された後) の間に競合状態があります。私の現在のアプリケーションではありませんが、これはセキュリティ上の問題かもしれません...

4

3 に答える 3

26

以前にも同じ要件があり、それを解決するために小さなクラスを作成しました。

public sealed class TemporaryFile : IDisposable {
  public TemporaryFile() : 
    this(Path.GetTempPath()) { }

  public TemporaryFile(string directory) {
    Create(Path.Combine(directory, Path.GetRandomFileName()));
  }

  ~TemporaryFile() {
    Delete();
  }

  public void Dispose() {
    Delete();
    GC.SuppressFinalize(this);
  }

  public string FilePath { get; private set; }

  private void Create(string path) {
    FilePath = path;
    using (File.Create(FilePath)) { };
  }

  private void Delete() {
    if (FilePath == null) return;
    File.Delete(FilePath);
    FilePath = null;
  }
}

指定したフォルダーまたはシステムの一時フォルダーに一時ファイルを作成します。これは使い捨てクラスであるため、寿命が尽きると (Disposeまたはデストラクタのいずれかで)、ファイルを削除します。プロパティを介して、作成されたファイルの名前 (およびパス) を取得しFilePathます。確かにそれを拡張して、書き込み用にファイルを開き、関連付けられている を返すこともできますFileStream

使用例:

using (var tempFile = new TemporaryFile()) {
    // use the file through tempFile.FilePath...
}
于 2010-07-31T14:20:07.390 に答える
8

Path.GetTempFileName および Path.GetTempPath です。次に、このリンクを使用して、暗号化されたデータをファイルに読み書きできます。

.NET は重要なセキュリティ アプリに最適なプラットフォームではないことに注意してください。重要なデータがハッカーにさらされる可能性のある落とし穴を回避するには、CLR の仕組みに精通している必要があります。

編集:競合状態について... GetTempPathを使用してから、一時的なファイル名を作成できます

Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(), ".TMP"))
于 2008-08-21T14:53:04.473 に答える
0

これを行うための(フレームワーク内の)組み込みクラスについては知りませんが、独自のクラスを作成することはそれほど問題にはならないと思います..

明らかに、書き込みたいデータのタイプと必要な「セキュリティ」に依存します..

DevFusion に関するこの記事は、始めるのに適した場所でしょうか?

于 2008-08-21T14:52:41.887 に答える