Wie ändert man die in einer Zeichenfolge in C ++ gespeicherte Dateinamenerweiterung?

8

Okay, hier ist der Deal, ich nehme eine Einführung in den C ++ - Kurs an meiner Universität und habe Probleme herauszufinden, wie man die Erweiterung einer Datei ändert. Zuerst sollten wir in einer .txt-Datei lesen und Wörter, Sätze, Vokale usw. zählen. Nun, ich habe das verstanden, aber der nächste Schritt ist, was mich beunruhigt. Wir sollen dann eine neue Datei erstellen, die den gleichen Dateinamen wie die Eingabedatei aber mit der Endung .code anstelle von .txt verwendet (in dieser neuen Datei sollen wir dann die Zeichenkette durch Addition von Zufallszahlen zum jeweiligen ASCII-Code codieren) Zeichen, wenn Sie interessiert waren). Als Anfänger in der Programmierung bin ich mir nicht ganz sicher, wie ich das machen soll. Ich benutze das folgende Stück Code, um zuerst die Eingabedatei zu erhalten:

%Vor%

Ich gehe davon aus, eine neue Datei zu erstellen, die ich benutze:

%Vor%

Aber ich werde nicht wissen, was der Dateiname ist, bis der Benutzer es eingibt, also kann ich "test.txt" nicht sagen. Wenn jemand weiß, wie man diese Erweiterung ändert, wenn ich eine neue Datei erstelle, würde ich es sehr schätzen!

    
Mr. Ben 16.04.2009, 20:34
quelle

12 Antworten

8

Dafür gibt es verschiedene Ansätze.

Sie können den super faulen Ansatz wählen und nur den Dateinamen und nicht die Erweiterung .txt eingeben. In diesem Fall können Sie .txt anhängen, um die Eingabedatei zu öffnen.

%Vor%

Dann rufst du einfach

an %Vor%

Der nächste Ansatz wäre, den gesamten Dateinamen einschließlich der Erweiterung zu übernehmen und einfach .code an ihn anzuhängen, damit Sie test.txt.code haben.

Es ist ein wenig mehrdeutig, ob das akzeptabel ist oder nicht.

Schließlich können Sie std::string methods find und replace , um den Dateinamen ohne Erweiterung zu erhalten und diesen zu verwenden.

    
Alan 16.04.2009, 20:44
quelle
8

Natürlich, wenn dies keine Hausaufgaben wären, sondern ein reales Projekt, würden Sie wahrscheinlich selbst - wie auch andere Leute, die Ihren Code lesen - einen Gefallen tun, indem Sie Boost.Filesystem replace_extension() , anstatt selbst zu rollen. Es gibt einfach keine Funktionalität, die einfach genug ist, dass Sie zumindest in einem bestimmten Fall keinen Fehler finden könnten.

    
Reunanen 16.04.2009 20:50
quelle
6

Ich frage mich gelegentlich diese Frage und lande auf dieser Seite, also für die zukünftige Referenz, hier ist die einzeilige Syntax:

%Vor%     
dvhamme 06.01.2015 10:05
quelle
4

Nicht zu verraten, denn Lernen ist der Kernpunkt der Übung, aber hier ist ein Hinweis. Sie werden wahrscheinlich eine Kombination aus find_last_of und replace .

    
Eclipse 16.04.2009 20:42
quelle
3

Hier sind ein paar Hinweise. Sie haben einen Dateinamen bereits eingegeben - was Sie tun möchten, ist der Teil des Dateinamens, der die Erweiterung nicht enthält:

%Vor%

Nachdem Sie diese Funktion geschrieben haben, können Sie sie verwenden, um den Namen der neuen Datei zu erstellen:

%Vor%     
1800 INFORMATION 16.04.2009 20:41
quelle
0

Pseudocode wäre etwas wie

%Vor%

Wenn Sie filename ändern möchten, sehen Sie sich strrchr und strcpy als Startpunkt an (möglicherweise geeignetere Methoden - das wäre aber gut für char *)

    
DougN 16.04.2009 20:42
quelle
0

In Windows (zumindest) können Sie _splitpath verwenden, um den Basisnamen aus der Rest der Stücke, und dann wieder zusammenfügen mit Ihrem Lieblings-String-Formatierer.

    
John Dibling 17.04.2009 02:44
quelle
0

Warum nicht die String-Methode find_last_of() ?

verwenden %Vor%     
yves Baumes 16.04.2009 20:53
quelle
0

Ich würde einfach ".code" an den Dateinamen anhängen, den der Benutzer eingegeben hat. Wenn sie "test.txt" eingeben, lautet die Ausgabedatei "test.txt.code". Wenn sie einen Dateinamen ohne Erweiterung eingeben, wie "test", lautet die Ausgabedatei "test.code".

Ich benutze diese Technik die ganze Zeit mit Programmen, die Ausgabedateien und eine Art von Protokollierungs- / Diagnoseausgaben erzeugen. Es ist einfach zu implementieren und macht meiner Meinung nach die Beziehungen zwischen den Dateien viel expliziter.

    
Ferruccio 11.05.2012 10:33
quelle
0

Wie wäre es mit strstr:

? %Vor%     
Maadiah 11.05.2012 07:51
quelle
0
%Vor%     
Iulian Palade 14.06.2016 11:59
quelle
-1

Sie müssen den ursprünglichen Dateinamen in eine neue Variable kopieren, in der Sie die Erweiterung ändern können. Etwas wie das:

%Vor%

Es ist möglich, dass Sie die Variable "filename" verwenden können, wenn Sie den ursprünglichen Dateinamen nicht für die spätere Verwendung behalten müssen. In diesem Fall könnten Sie einfach verwenden:

%Vor%

Der Schlüssel ist, die Definition der C ++ - String-Klasse zu betrachten und zu verstehen, was jede Member-Funktion macht. Wenn Sie rfind verwenden, wird rückwärts durch die Zeichenfolge gesucht, und Sie werden nicht versehentlich auf Erweiterungen in Ordnernamen stoßen, die Teil des ursprünglichen Dateinamens sein könnten (z. B. "C: \ MyStuff.School \ MyFile.txt"). Wenn Sie mit den Offsets von find, rfind usw. arbeiten, sollten Sie auch darauf achten, sie richtig zu verwenden, wenn Sie sie an andere Methoden übergeben (zB verwenden Sie assign (Dateiname, 0, extPos-1), zuweisen (Dateiname, 0, extPos), zuweisen (Dateiname, 0, extPos + 1)).

Ich hoffe, das hilft.

    
Neal S. 16.04.2009 20:50
quelle

Tags und Links