Hvordan lage en midlertidig fil (for å skrive til) i C #?

stemmer
15

Mulig Duplicate:
Lage tempory mapper

Jeg ser etter noe som tempfilemodul i Python: A (helst) sikker måte å åpne en fil for å skrive til. Dette bør være lett å slette når jeg er ferdig for ...

Det virker, .NET har ikke de batterier inkludert funksjonene i tempfilemodulen, som ikke bare skaper filen, men returnerer filen descriptor (gamle skolen, jeg vet ...) til den sammen med banen. Samtidig gjør det sikkert bare skape brukeren kan få tilgang til filen og whatnot ( mkstemp()tror jeg): https://docs.python.org/library/tempfile.html


Ah, ja, jeg kan se det. Men GetTempFileName har en ulempe: Det er et kappløp tilstand mellom når filen ble opprettet (på oppfordring til GetTempFileName en 0-Byte-filen blir opprettet), og når jeg kommer til å åpne den (etter retur av GetTempFileName). Dette kan være et sikkerhetsproblem, men ikke for min nåværende søknad ...

Publisert på 21/08/2008 klokken 14:50
kilden bruker
På andre språk...                            


3 svar

stemmer
24

Jeg har også hatt det samme kravet før, og jeg har laget en liten klasse for å løse det:

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

Det skaper en midlertidig fil i en mappe du angir eller i systemet midlertidig mappe. Det er en engangs klasse, så på slutten av sitt liv (enten Disposeeller destructor), det sletter filen. Du får navnet på filen opprettet (og bane) gjennom FilePatheiendommen. Du kan sikkert utvide den til også åpne fil for skriving og returnere dens tilhørende FileStream.

Et eksempel bruk:

using (var tempFile = new TemporaryFile()) {
    // use the file through tempFile.FilePath...
}
Svarte 31/07/2010 kl. 14:20
kilden bruker

stemmer
7

Path.GetTempFileName og Path.GetTempPath. Deretter kan du bruke denne linken for å lese / skrive krypterte data til filen.

Notat, er .NET ikke den beste plattformen for kritiske sikkerhets apps. Du må være godt bevandret i hvordan CLR arbeider for å unngå noen av fallgruvene som kan avsløre dine kritiske data for hackere.

Edit: Om race condition ... Du kan bruke GetTempPath, og deretter opprette en midlertidig filnavn ved hjelp

Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(), ".TMP"))
Svarte 21/08/2008 kl. 14:53
kilden bruker

stemmer
0

Jeg vet ikke om noen innebygd (innenfor rammen) klasser å gjøre dette, men jeg kan tenke meg at det ikke ville være for mye av et problem å rulle din egen ..

Tydeligvis det avhenger av hvilken type data du ønsker å skrive til den, og "sikkerhet" nødvendig ..

Denne artikkelen på DevFusion kan være et godt sted å begynne?

Svarte 21/08/2008 kl. 14:52
kilden bruker

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