Nasıl C # (yazma için) geçici bir dosya oluşturmak için?

oy
14

Olası Çoğalt:
tempory klasörler oluşturma

Ben böyle bir şey arıyorum tempfilePython modülü: yazma için bir dosyayı açmak için A (tercihen) güvenli bir yol. Bu benim de işim bittiğinde silmek kolay olmalı ...

NET özellikleri dahil pilleri yok gibi görünüyor tempfilesadece dosya oluşturur modülü, fakat yolu ile birlikte kendisine dosya tanıtıcı (eski okul, ben ... biliyorum) döndürür. Aynı zamanda, emin sadece oluşturarak kullanıcı dosya ve etajer (erişebilir kılan mkstemp()Sanırım): https://docs.python.org/library/tempfile.html


Ah, evet, bunu görebiliyorum. Ama GetTempFileName bir dezavantajı var: Orada (yaratılmış olur bir 0-Byte dosyasını GetTempFileName çağrısı üzerine) dosyası oluşturulduğunda arasında bir yarış durumu ve ben (GetTempFileName dönüşü sonrasında) açmak için olsun. Bu benim şimdiki uygulama için olmasa da, bir güvenlik sorunu olabilir ...

Oluştur 21/08/2008 saat 13:50
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
0

Bunu yapmak için sınıflar (çerçevesinde) inşa herhangi bilmiyorum, ama kendi rulo bir sorun çok fazla olmaz hayal ..

Açıkçası bunu yazmasını istediğiniz verinin türüne bağlıdır, ve "güvenlik" Gerekli ..

Bu makale DevFusion üzerinde başlamak için iyi bir yer olabilir?

Cevap 21/08/2008 saat 13:52
kaynak kullanıcı

oy
6

Path.GetTempFileName ve Path.GetTempPath. Sonra kullanabilirsiniz bu bağlantıyı dosyasına şifreli veriyi okuma / yazma.

Not .NET kritik güvenlik uygulamaları için en iyi platformu değildir. İyi CLR korsanlara karşı kritik verileri savunmasız bırakabilecek bazı tuzaklardan kaçınmak için nasıl çalıştığını usta lazım.

Düzenleme: yarış durumu hakkında ... Sen GetTempPath kullanabilirsiniz, o zaman kullanarak geçici bir dosya adı oluşturmak

Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(), ".TMP"))
Cevap 21/08/2008 saat 13:53
kaynak kullanıcı

oy
23

Ben de daha önce aynı şartını yaşadım ve bunu çözmek için küçük bir sınıf oluşturduk:

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;
  }
}

Bu belirttiğiniz bir klasöre veya sistem geçici klasörde bir geçici dosya oluşturur. Onun hayatı (ya sonunda, yani tek kullanımlık sınıf var Disposeya yoketme), bu dosyayı siler. Sen yoluyla oluşturulan dosya (ve yol) adını alır FilePathözellik. Kesinlikle de yazmak için dosyayı açmak ve ilişkili döndürecek şekilde uzatabilirsiniz FileStream.

Bir örnek kullanımı:

using (var tempFile = new TemporaryFile()) {
    // use the file through tempFile.FilePath...
}
Cevap 31/07/2010 saat 13:20
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more