Avatar billede maqhem Nybegynder
02. december 2005 - 14:57 Der er 31 kommentarer og
1 løsning

Oprette fil/dokument

Hej!

Hvordan er det muligt, at oprette en fil udelukkende med C++?
Filen behøver i dette tilfælde ikke at være andet end en simpel .txt/fil...


På forhånd tak!!

(Filens indhold skal være "Hej")
Avatar billede maqhem Nybegynder
02. december 2005 - 14:57 #1
*.txt-fil
Avatar billede maqhem Nybegynder
02. december 2005 - 17:16 #2
Okay... Laver lige lidt om på det...

Jeg bruger følgende stykke kode, og vil gerne lave en fil med en variabel:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdlib.h>
#include <fstream>
using namespace std;

int main(){
  ofstream out("c:\\test.txt", ios::out);
  out << "Indhold" << endl;
}

Jeg vil gerne have den til at se ud, noget al á dette:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdlib.h>
#include <fstream>
using namespace std;

string fil;
string pla;

int main(){
  cout "Enter filename:\n";
  cin fil;
  pla = "c:\\windows\\Documents and Setings\\All Users\\Desktop\\" + fil + ".txt";
  ofstream out(pla, ios::out);
  out << "Indhold" << endl;
}

men det duer ikke (???)
Avatar billede maqhem Nybegynder
02. december 2005 - 17:18 #3
Hovsa... Skal se sådan hér ud:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdlib.h>
#include <fstream>
using namespace std;

string fil;
string pla;

int main(){
  cout << "Enter filename:\n";
  cin >> fil;
  pla = "c:\\windows\\Documents and Setings\\All Users\\Desktop\\" + fil + ".txt";
  ofstream out(pla, ios::out);
  out << "Indhold" << endl;
}
Avatar billede maqhem Nybegynder
02. december 2005 - 17:20 #4
Den godtager åbenbart ikke 'pla' i

ofstream out(pla, ios::out);
Avatar billede bertelbrander Novice
02. december 2005 - 19:53 #5
Af uforklarlige grunde skal constructoren til ofsterem have en "const char *" som filnavn, af mere forklarlige grunde er der ikke automatisk konvertering mellem std::string og const char *, du kan dog bede om det ved at bruge std::string's c_str():

ofstream out(pla.c_str(), ios::out);
Avatar billede maqhem Nybegynder
02. december 2005 - 21:23 #6
Nu benytter jeg så følgende stykke kode, men hvis jeg skriver for eksempel "created file" laver den uden at spørge om indholdet en fil der hedder "created.txt" med indholdet "file". Hvordan laver jeg sådan, at alt hvad man skriver ind bliver lagt til filnavnet...?

#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdlib.h>
#include <fstream>
using namespace std;

string fil;
string indhold;
string placering;

int main(){
    cout << "Filnavn:\n";
    cin >> fil;
    cout << "\n\n";
    cout << "Indhold:\n";
    cin >> indhold;
    placering = "C:\\Documents and Settings\\" + fil + ".txt";
    ofstream out(placering.c_str(), ios::out);
    out << indhold << endl;
}
Avatar billede bertelbrander Novice
02. december 2005 - 21:28 #7
#include <iostream>
#include <string>
#include <stdlib.h>
#include <fstream>
using namespace std;

string fil;
string indhold;
string placering;

int main()
{
    cout << "Filnavn:\n";
    getline(cin, fil);
    cout << endl << endl;
    cout << "Indhold: " << endl;
    getline(cin, indhold);
    placering = "C:\\Documents and Settings\\" + fil + ".txt";
    ofstream out(placering.c_str(), ios::out);
    out << indhold << endl;
}
Avatar billede maqhem Nybegynder
02. december 2005 - 21:31 #8
Du er SUPER!!! Vil du være så rar at fortælle hvad getline og endl betyder sådan kodemæssigt?
Avatar billede bertelbrander Novice
02. december 2005 - 21:37 #9
getline læser en hel linie, inklusive mellemrum, >> kan kun læse ét ord.
endl laver ca. det samme som '\n', normalt foretrækkes endl.
Avatar billede maqhem Nybegynder
02. december 2005 - 21:39 #10
og den dér "out"?
Avatar billede bertelbrander Novice
02. december 2005 - 21:42 #11
"out" ??
Avatar billede maqhem Nybegynder
02. december 2005 - 21:44 #12
ja...:

    ofstream out(placering.c_str(), ios::out);
    out << indhold;

"out(", "ios::out" og "out <<" - hvad betyder alle disse ting?
Avatar billede bertelbrander Novice
02. december 2005 - 21:48 #13
out er filen

ios::out fortæller at filen skal bruges til at skrive i, et er egentlig overflødigt da en ofstream er en out/skrive fil.

out << bruges til at skrive til filen.
Avatar billede maqhem Nybegynder
02. december 2005 - 21:58 #14
Tusinde tak... Du skal have dine points, smid et svar :D
Avatar billede bertelbrander Novice
03. december 2005 - 00:13 #15
Jeg samler ikke på point.
Avatar billede maqhem Nybegynder
03. december 2005 - 10:44 #16
Jamen så tager jeg dem bare selv ;)

kan du så lige som en sidste ting fortælle mig hvad dén der linie:

using namespace std;

gør godt for?
Avatar billede maqhem Nybegynder
03. december 2005 - 10:49 #17
Nårh ja, så er der lige en sidste ting... hvis jeg nu vil have mit script til at publishere på en anden computer siger den, at den mangler en DLL-fil (tror jeg nok)... Hvad gør jeg for, at få det til at du?

Hvis jeg eventuelt sender den via mail eller brænder en cd... (?)
Avatar billede Slettet bruger
04. december 2005 - 09:15 #18
Koden

#include <iostream>
#include <string>
#include <stdlib.h>
#include <fstream>
using namespace std;

string fil;
string indhold;
string placering;

int main()
{
    cout << "Filnavn:\n";
    getline(cin, fil);
    cout << endl << endl;
    cout << "Indhold: " << endl;
    getline(cin, indhold);
    placering = "C:\\Documents and Settings\\" + fil + ".txt";
    ofstream out(placering.c_str(), ios::out);
    out << indhold << endl;
}

virker ikke på min maskine?!
Avatar billede maqhem Nybegynder
04. december 2005 - 13:29 #19
ikke så sært. Virker heller ikke på min. Men jeg benytter denne i stedet for:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdlib.h>
#include <fstream>
#include <sys/stat.h>
using namespace std;

string fil;
string filetype;
string indhold;
string placering;

int main(){
    cout << "C:/(...)";
    cout << "\n\n";
    cout << "Enter filename: ";
    getline(cin, fil);
    cout << endl;
    cout << "Enter file type: ";
    getline(cin, filetype);
    cout << endl;
    cout << "Enter contents: ";
    getline(cin, indhold);
    cout << endl;
    cout << "Creating file : "+fil+"."+filetype;
    cout << "\n";
    placering = "C:\\"+fil+"."+filetype;
    ofstream file_outside(placering.c_str());
    file_outside << indhold;
    cout << endl << "File created...";
    system("pause");
}
Avatar billede maqhem Nybegynder
04. december 2005 - 13:32 #20
du kan jo eventuelt proppe dette her ind:

cout << "Enter root: "; (hvor root jo er stien :) -  i stedet for, at man i navnet skal skrive \Documents and Settings\(...))
Avatar billede bertelbrander Novice
10. december 2005 - 17:51 #21
Hvilken dll fil siger den at den mangler? Der bør ikke bruges nogen speciel dll for så simpel kode.
Hvilken kompiler?

stdafx.h er kun for visual c++ og kun for sære opsætninger af denne.
Avatar billede maqhem Nybegynder
10. december 2005 - 19:55 #22
Det er da rigtigt nok, at man skal benytte exe-filen, ikke?

For det var nemlig den jeg brugte...
Avatar billede bertelbrander Novice
10. december 2005 - 20:12 #23
Ja, man skal bruge .exe filen.
Men "03/12-2005 10:49:24" skrev du at "... siger den, at den mangler en DLL-fil".
Avatar billede maqhem Nybegynder
10. december 2005 - 22:18 #24
Jeg har lige nu ingen "test"-computer at prøbe med, ,em jeg skal skrive så snart jeg ved hvad den melder ud med af fejl :)
Avatar billede maqhem Nybegynder
10. december 2005 - 23:24 #25
Den siger:

En nødvendig .DLL-fil, MSVCP80D.DLL, blev ikke fundet
Avatar billede maqhem Nybegynder
10. december 2005 - 23:27 #26
og så skal det vel lige siges, at jeg har lavet mit "program"/projekt på XP, og skal tjekkes på en 98'er. Kan det give problemer?
Avatar billede maqhem Nybegynder
10. december 2005 - 23:30 #27
VCpp er heller ikke installeret på test computeren
Avatar billede maqhem Nybegynder
10. december 2005 - 23:33 #28
men det burde vel ikke give problemer, da udførelsen/publisheringen sker i COMMAND.

Dén fil der mangler ligger på min computer hér:

C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c\msvcp80d.dll

sammen med følgende filer:

C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c\msvcm80d.dll

C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c\msvcr80d.dll
Avatar billede maqhem Nybegynder
10. december 2005 - 23:37 #29
ÆNDRET DEN-datoen tror jeg faktisk også er datoen for, hvornår jeg installerede Cpp, er det en fil som Cpp-scripts behøver for at kunne publisheres?
Avatar billede bertelbrander Novice
10. december 2005 - 23:59 #30
Med cpp mener du så VisualC++ ?
Jeg er bange for at du bliver nødt til at distribuere dll'en sammen med programmet eller finde en måde at få VisualC++ til at linke uden at behøve den.

(Der er ikke scripts i c++.)
Avatar billede maqhem Nybegynder
11. december 2005 - 13:05 #31
(Der er ikke scripts i c++.) -- Hvad kalder man så selve scripteringen i C++?

med cpp mener jeg c++ - vcpp er så visual c++

Men hvordan skal jeg få den til at linke uden at behøve den fil? Kan det eventuelt findes hér på eksperten?
Avatar billede bertelbrander Novice
11. december 2005 - 13:41 #32
Når man laver c++ programmer skriver man source kode, dette kompileres til et program der så afvikles.
Når man laver html eller python eller bat-filer eller ... afvikles den kode man skriver direkte, og så er det scripts.

Med hensyn til dll'en: Jeg er ikke sikker, men jeg tror at den er nødvendig fordi du kompilerer en debug version, du kan måske løse problemet ved at kompilere en release version. Det er også muligt at du kan løse problemet ved at undlade at kompilere til .net.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester