2016-07-03 2 views
-5

Ich möchte eine Funktion in C++ definieren, die bei jedem Aufruf dieser Funktion eine Datei mit Dateihandhabung mit anderem Namen erstellt.Erstellung mehrerer Dateien in C++ Verwenden von Dateibehandlung für einen bestimmten Funktionsaufruf

Wie kann ich es implementieren?

Ich bin nicht bereit, if-else zu verwenden, da ich viele, viele Dateien brauche.

Ich bin total leer. Bitte schlagen Sie einen möglichen Weg vor.

+3

Willkommen bei stackoverflow.com. Bitte nehmen Sie sich etwas Zeit, [die Hilfeseiten] (http://stackoverflow.com/help) zu lesen, besonders die Abschnitte mit dem Namen ["Welche Themen kann ich hier fragen?"] (Http://stackoverflow.com/help/) on-topic) und ["Welche Art von Fragen sollte ich vermeiden zu fragen?"] (http://stackoverflow.com/help/dont-ask). Lesen Sie auch, wie Sie gute Fragen stellen können (http://stackoverflow.com/help/how-to-ask) und erfahren Sie, wie Sie ein [minimales, vollständiges und verifizierbares Beispiel] erstellen können (http: // stackoverflow .com/hilfe/mcve). –

+0

Wurde zum erneuten Öffnen ausgewählt, da hierfür Standardfunktionen für die Bibliothek zur Verfügung stehen. Die Frage ist breit, aber nicht zu weit gefasst. –

+0

Rolled zurück Iwans bearbeiten, weil es (1) eine Anforderung (das Nein, wenn sonst) entfernt, und (2) eine andere Anforderung hinzugefügt (von einem Wert zwischen Anrufen beibehalten, die keine Beobachtung ist, sondern eine neue Anforderung, die passiert passt Ivans eigene Antwort). –

Antwort

0

Sie benötigen statische Variablen.

Eine statische Variable ermöglicht es Ihnen, konsistente Daten zwischen Funktionsaufrufen zu haben.

std::string createFileName() 
{ 
    static int x = 0; 
    std::string filename = "file_"; 
    filename += x; 
    filename += ".txt"; 
    x++; 
    return filename; 
} 

Jedes Mal createFileName aufgerufen wird, wird x erhöhen. ersten Aufruf zurückkehrt „file_0.txt“ 2. Aufruf zurückkehrt „file_1.txt“ Etc ...

+1

Und warum sollte das sein? – GhostCat

+0

Können Sie bitte näher ausführen. Ich habe keine Ahnung, wie statische Variablen das für mich tun können. Außerdem möchte ich bei jedem Aufruf der Funktion eine Datei mit anderem Namen. –

+0

@Ivan Rubinson Perfekt Ich habe was ich wollte. Vielen Dank. :) –

1

für temporäre Dateien verwenden Sie die tempnam function Standardbibliothek oder Familie (z std::tmpfile).


Wenn Sie nicht zufrieden sind mit tempnam dann können Sie jeden dieser Ansätze verwenden:

  • erstellen eine ähnliche Reihe systematischen Namen auf z.B. ein Zähler.
    Ein Zähler kann als explizites Argument an die Funktion übergeben werden oder ein Klassendatenelement (mit der Funktion als Funktionsmember) oder eine statische lokale Variable in der Funktion oder eine Namespacebereichsvariable . Ich denke, ich würde das Klassendatenmitglied verwenden.

  • Erstellen Sie Namen aus hochauflösenden Zeitstempeln.
    Dies begrenzt die Rate der Namensgenerierung, aber Dateierstellung ist eine zeitaufwendige Aktion, so dass die Rate kein praktisches Problem sein sollte. Und auf der positiven Seite, jeder Name der Datei sagt dann, wann es erstellt wurde.

  • Verwenden Sie UUIDs.
    Ein UUID, ein Universell eindeutiger IDentifier, ist eine 128-Bit-Pseudozufallskennung, die extrem unwahrscheinlich ist, mit jeder anderen generierten UUID identisch zu sein. Leider bietet die C++ - Standardbibliothek keine UUID-Unterstützung. Aber es gibt verfügbare UUID-Generierung für jede allgemein verwendete allgemeine Computerplattform.

Wenn Sie die Zeitstempel wollen, aber ohne die Ratenbegrenzung (Auflösung des Zeitstempels), dann können Sie es mit dem Gegen Ansatz kombinieren, das heißt beide verwenden.

Ich würde UUIDs nicht wirklich empfehlen, weil sie für uns Menschen schwer zu merken und zu erkennen sind. Wenn Sie nur den Blick vom Debugger oder von einer Ablaufverfolgung auf eine Verzeichnisanzeige richten, ist die UUID, die Sie gesehen haben, möglicherweise aus Ihren Gedanken verschwunden. Sequenznummern und Zeitstempel sind menschenfreundlicher.


In Bezug auf

Ich bin If-Else nicht verwenden Willing Da ich ein sehr viele Dateien

& hellip benötigen; das ist eine Quatsch-Anforderung.

Um bessere Antworten auf Ihre Fragen zu erhalten, geben Sie einfach das Problem an und fügen Sie keine einschränkenden Anforderungen hinzu, die auf Ihrer Bewertung der Güte oder Nichtsicht einer bestimmten (Nicht-) Lösung basieren.

+0

@ cheers-and-hth-alf Danke aber vor allem brauche ich keine temporären Dateien. Ich brauche einige dauerhafte Dateien, die bleiben müssen, bis ich sie entfernen möchte, zweitens kann ich einfach nicht verwenden wenn-sonst, wenn ich eine Anzahl von Dateien brauche, musste ich diese Einschränkung setzen, um die Antworten zu filtern, die ich bekommen habe und zu vermeide die Antworten, die ich eigentlich nicht benötige.:/ –

+0

Das ist kaum eine Antwort, das sollte ein Kommentar sein, nicht was man sich wünscht. –

+0

@IvanRubinson: Deine Meinung ist falsch, ich habe umfangreiche Erfahrung mit rein assoziativem Nicht-Denken Starke Meinungen zu Stack Overflow und anderen netbasierten Programmierforen, so dass jeder konkrete Kommentar und SO-Downvote für mich nicht mehr verwirrend ist, aber das Phänomen ist sowohl verblüffend als auch Grund zur Besorgnis, dass sich unsere Gesellschaft scheinbar bewegt Von der Vernunft und dem Diskurs weg, so dass selbst Programminteressierte nicht mehr in der Lage sind, über die einfachsten, trivialsten Dinge nachzudenken. Die Götter kämpften umsonst. Was können wir dann tun, denkst du? –

Verwandte Themen