Πώς να δημιουργήσετε ένα προσωρινό αρχείο (για εγγραφή σε) σε C #;

ψήφοι
14

Πιθανή Διπλότυπο:
Δημιουργία πρόσκαιρης φακέλους

Ψάχνω για κάτι σαν τη tempfileμονάδα στην Python: Ένα (κατά προτίμηση) ασφαλής τρόπος για να ανοίξετε ένα αρχείο για εγγραφή σε. Αυτό θα πρέπει να είναι εύκολο να διαγράψει όταν είμαι γίνει πάρα πολύ ...

Φαίνεται, .NET δεν έχει τις «μπαταρίες περιλαμβάνονται» τα χαρακτηριστικά της tempfileμονάδας, η οποία όχι μόνο δημιουργεί το αρχείο, αλλά επιστρέφει τον περιγραφέα αρχείου (παλιό σχολείο, το ξέρω ...) να το μαζί με τη διαδρομή. Την ίδια στιγμή, κάνει σίγουρα μόνο η δημιουργία χρήστης μπορεί να έχει πρόσβαση στο αρχείο και εταζέρα ( mkstemp()νομίζω): https://docs.python.org/library/tempfile.html


Αχ, ναι, μπορώ να δω αυτό. Αλλά GetTempFileName έχει ένα μειονέκτημα: Υπάρχει μια κατάσταση κούρσας μεταξύ, όταν δημιουργήθηκε το αρχείο (μετά την κλήση για να GetTempFileName ένα αρχείο 0-Byte παίρνει δημιουργούνται) και όταν έχω να το ανοίξει (μετά την επιστροφή του GetTempFileName). Αυτό μπορεί να είναι ένα ζήτημα ασφαλείας, αν και όχι για την τρέχουσα εφαρμογή μου ...

Δημοσιεύθηκε 21/08/2008 στις 15:50
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
0

Δεν ξέρω από τυχόν ενσωματωμένα (μέσα στο πλαίσιο) μαθήματα για να γίνει αυτό, αλλά φαντάζομαι δεν θα ήταν πάρα πολύ από ένα θέμα για να κατασκευάζουν τα δικά σας ..

Προφανώς εξαρτάται από το είδος των δεδομένων που θέλετε να γράψετε σε αυτό, και η «ασφάλεια» που απαιτείται ..

Αυτό το άρθρο σχετικά με DevFusion μπορεί να είναι ένα καλό μέρος για να ξεκινήσετε;

Απαντήθηκε 21/08/2008 στις 15:52
πηγή χρήστη

ψήφοι
6

Path.GetTempFileName και Path.GetTempPath. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε αυτό το σύνδεσμο για να διαβάσετε / γράψετε κρυπτογραφημένα δεδομένα στο αρχείο.

Σημείωση, .NET δεν είναι η καλύτερη πλατφόρμα για κρίσιμες εφαρμογές ασφάλειας. Θα πρέπει να γνωρίζει καλά πώς λειτουργεί η CLR για να αποφύγει μερικές από τις παγίδες που μπορεί να εκθέσει κρίσιμα δεδομένα σας στους χάκερ.

Επεξεργασία: Σχετικά με την κατάσταση κούρσας ... Θα μπορούσατε να χρησιμοποιήσετε GetTempPath, στη συνέχεια, δημιουργήστε ένα προσωρινό όνομα αρχείου, χρησιμοποιώντας

Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(), ".TMP"))
Απαντήθηκε 21/08/2008 στις 15:53
πηγή χρήστη

ψήφοι
23

Είχα επίσης την ίδια απαίτηση πριν, και έχω δημιουργήσει μια μικρή τάξη για την επίλυσή του:

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ή ο destructor), διαγράφει το αρχείο. Μπορείτε να πάρετε το όνομα του αρχείου που δημιουργείται (και τη διαδρομή) μέσα από το FilePathακίνητο. Μπορείτε βεβαίως να το επεκτείνει για το άνοιγμα και το αρχείο για τη σύνταξη και την επιστροφή των συναφών του FileStream.

Ένα παράδειγμα χρήσης:

using (var tempFile = new TemporaryFile()) {
    // use the file through tempFile.FilePath...
}
Απαντήθηκε 31/07/2010 στις 15:20
πηγή χρήστη

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