Avatar billede Slettet bruger
01. december 2005 - 17:01 Der er 88 kommentarer og
1 løsning

Begynderen vil have hjælp igen!

Hej igen eksperter!
Nu har jeg fået nogenlunde fat i de mest grundlæggende funktioner i C++...
Hvordan kan man åbne en fil eller ekasakvere (staves det sådan?) en applikation via C++?
Hvordan kan man desuden slette in fil (eller applikation) via C++?
Hvordan kan man omdøbe (kan man det?) en fil (eller applikation)?
Avatar billede datasource Nybegynder
01. december 2005 - 17:11 #1
Hvis det er Windows, kunne su "snyde" og bruge DOS commands:

inkluder <iostream> og brug:
system("filnavn/sti");
system("del hej.exe");
system("rename hej.exe hej2.exe");
Avatar billede Slettet bruger
01. december 2005 - 17:14 #2
Hehe...
Prøver lige...
Avatar billede Slettet bruger
01. december 2005 - 17:15 #3
Hvordan kan jeg bruge variabler i disse funktioner?
Avatar billede Slettet bruger
01. december 2005 - 17:20 #4
Sådan:

system(variabel);
system("del "variabel);
system("rename "variabel1" "variabel2);

?
Avatar billede datasource Nybegynder
01. december 2005 - 18:18 #5
du er nødt til at have kommandoen inde i variablen fx:

#include <iostream>
#include <string.h>

int main()
{
char fil[50] = "del test.txt";

system(fil);
return 0;
}
Avatar billede arne_v Ekspert
01. december 2005 - 19:04 #6
system funktionen er ikke i iostream men i cstdlib

cstdio har et par funktioner remove og rename som nok passer godt her

char cmd[1000];
sprintf(cmd,"del %s",filnavnvar);
system(cmd);
Avatar billede maqhem Nybegynder
02. december 2005 - 17:53 #7
Det kan jeg sq ikke få til at du :S

Er koden ikke bare:

(Har bare taget så mange #include's som jeg kunne finde)

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

int main(){
    system("C:\\Documents and Settings\\All Users");
    system("rename test.exe aendret.exe");
}
Avatar billede maqhem Nybegynder
02. december 2005 - 17:54 #8
kan hverkern få den til at delete eller rename ... :(
Avatar billede Slettet bruger
02. december 2005 - 19:36 #9
Nicolaj (zipper-znake)!
I den første 'system()'-linie har du ikke valgt en fil; kun en mappe! - hehe!
Den anden... Hahaha! Undskyld, men... Nåja, du har kun skrevet filnavnet; du skal skrive hele stien!
- Toke
Avatar billede Slettet bruger
02. december 2005 - 19:39 #10
system("C:\\Documents and Settings\\All Users\\test.exe");
- Åbner 'test.exe'.
system("rename C:\\Documents and Settings\\All Users\\test.exe C:\\Documents and Settings\\All Users\\aendret.exe");
- Omdøber 'test.exe' til 'aendret.exe'.
Avatar billede Slettet bruger
02. december 2005 - 19:39 #11
Undskyld alle, jeg kunne ikke dy mig...
Avatar billede Slettet bruger
02. december 2005 - 20:10 #12
Ups... Mit forslag virker heller ikke?!
Avatar billede bertelbrander Novice
02. december 2005 - 20:19 #13
system("rename \"C:\\Documents and Settings\\All Users\\test.exe\" \"C:\\Documents and Settings\\All Users\\aendret.exe\"");
Avatar billede arne_v Ekspert
03. december 2005 - 04:49 #14
og jeg synes stadigvæk at stdio funktionerne var en bedre løsning
Avatar billede Slettet bruger
03. december 2005 - 08:25 #15
Jeg er ikke helt med... Det du har skrevet der virker... Men dette gør ikke:

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

string file;
string name;
string command;

int main() {
    // Skabelon: system("rename \"C:\\Documents and Settings\\All Users\\test.txt\" \"aendret.txt\"");
    cout << "Renamer (03-12-2005)\n\nEnter file path:\n";
    cin >> file;
    cout << "\nEnter new name:\n";
    cin >> name;
    cout << "\nGenerating command...";
    command = "rename \"" + "\" \"" + name + "\"";
    cout << "\n\nCommand generated: '" << command << "'.";
    cout << "\n\nRenaming '" << file << "' to '" << name << "'.";
    system(command);
}
Avatar billede Slettet bruger
03. december 2005 - 11:53 #16
arne_v... Dine funktioner virker også på maskiner der ikke kører Windows...?
Avatar billede maqhem Nybegynder
03. december 2005 - 12:21 #17
Lol, 2, havde ikke spurgt hvis det bare var så enkelt at du kunne finde ud af det :P

Men jeg håber dog virkeligt på et brugbart svar :)
Avatar billede arne_v Ekspert
03. december 2005 - 15:46 #18
rename og remove er ANSI C og virker derfor med alle styre systemer og compilere
Avatar billede arne_v Ekspert
03. december 2005 - 15:50 #19
eksmepel med renameÆ

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    string fnm1,fnm2;
    cout << "Indtast filnavn:";
    getline(cin,fnm1);
    cout << "Indtast filnavn:";
    getline(cin,fnm2);
    rename(fnm1.c_str(),fnm2.c_str());
    return 0;
}
Avatar billede Slettet bruger
03. december 2005 - 17:31 #20
Ok... Kan jeg få dig til at vise delete og åbn også...?
Avatar billede Slettet bruger
03. december 2005 - 17:33 #21
Heh... Rename virker ikke!

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    string fnm1,fnm2;
    cout << "Indtast filnavn:";
    getline(cin,fnm1);
    cout << "Indtast filnavn:";
    getline(cin,fnm2);
    rename(fnm1.c_str(),fnm2.c_str());
    return 0;
}

- Det dur ik'!
Avatar billede arne_v Ekspert
03. december 2005 - 17:54 #22
det virker hos mig

hvad sker der hos dig ?
Avatar billede Slettet bruger
03. december 2005 - 18:22 #23
Ikke noget!
Der kommer bare en boks op om at der er fejl i koden!
Avatar billede Slettet bruger
03. december 2005 - 19:27 #24
(Jeg bruger Visual Studio 2005 Express Edition, hvis det har noget som helst at sige...)
Avatar billede arne_v Ekspert
03. december 2005 - 19:48 #25
hvad er den præcise fejl besked ?
Avatar billede maqhem Nybegynder
03. december 2005 - 20:39 #26
2, følgende kode virker perfekt:

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

string fnm1;
string fnm2;
string sti;
string fun1;
string fun2;

int main(){
    cout << "Enter root: ";
    getline(cin,sti);
    cout << "Enter file: ";
    cout << endl << sti << "\\>";
    getline(cin,fnm1);
    cout << "Enter file name: ";
    cout << endl << sti << "\\>";
    getline(cin,fnm2);
    fun1 = sti + "\\" + fnm1;
    fun2 = sti + "\\" + fnm2;
    rename(fun1.c_str(),fun2.c_str());
}
Avatar billede maqhem Nybegynder
03. december 2005 - 22:10 #27
Nu ved jeg ikke lige hvad sti hedder på engelsk i dette tilfælde, men nu har jeg altså bare kaldt det for root. Prøv :) men den duer ikke hvis du benytter ,,\all users\(...) - det SKAL være en bruger du går ind under
Avatar billede Slettet bruger
04. december 2005 - 08:55 #28
Ja... For den kan ikke gemme et mellemrum i en variabel... :( Jeg tror det var det der gik galt... Nå, prøver lige din.
Avatar billede Slettet bruger
04. december 2005 - 09:01 #29
Hvad betyder endl?
Avatar billede Slettet bruger
04. december 2005 - 12:34 #30
Bare glem det...
Avatar billede Slettet bruger
04. december 2005 - 12:34 #31
Kan jeg få dig til at smide et svar, arne_v?
Avatar billede maqhem Nybegynder
04. december 2005 - 13:21 #32
endl betyder det samme som <p> i PHP, mens "\n" er det samme som "<br>" :)
Avatar billede maqhem Nybegynder
04. december 2005 - 13:22 #33
og dét der getline(cin, var); gemmer hele indholdet af indtastningen (inklusiv mellemrum: " ")
Avatar billede maqhem Nybegynder
04. december 2005 - 13:47 #34
og 2, denne kode sletter filen fint:

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

string fnm1;
string sti;
string fun1;

int main(){
    cout << "Enter root: ";
    getline(cin,sti);
    cout << "Enter file: ";
    cout << endl << sti << "\\>";
    getline(cin,fnm1);
    fun1 = "del \""+sti+"\\"+fnm1+"\"";
    system(fun1.c_str());
}
Avatar billede maqhem Nybegynder
04. december 2005 - 13:49 #35
så mangler vi vidst kun at kunne åbne filen, og det gøres sådan hér:

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

string fnm1;
string sti;
string fun1;

int main(){
    cout << "Enter root: ";
    getline(cin,sti);
    cout << "Enter file: ";
    cout << endl << sti << "\\>";
    getline(cin,fnm1);
    fun1 = "\""+sti+"\\"+fnm1+"\"";
    system(fun1.c_str());
}

Kunne jeg måske få pointsne?

Test lige mine scripts af, de duer perfekt :D
Avatar billede maqhem Nybegynder
04. december 2005 - 14:46 #36
Denne kode holder sq tæt:

(laver en fil)

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

string sti;
string fil_navn;
string fuld_sti;
string indhold;

int main(){
    cout << "Enter path:\n";
    getline(cin,sti);
    cout << endl;
    cout << "Enter file name:\n";
    cout << sti << "\\>";
    getline(cin,fil_navn);
    cout << endl;
    cout << "Enter file contents:";
    cout << endl;
    getline(cin,indhold);
    fuld_sti = sti + "\\" + fil_navn;
    cout << endl << endl << endl << "Creating file...";
    ofstream extern_fil(fuld_sti.c_str());
    extern_fil << indhold;
    cout << endl << endl << endl << "File created!";
    cout << endl << endl << endl;
    system("pause");
}


eksempel 1:

<ENTER PATH>
    C:\Documents and Settings\<BRUGER>\Skrivebord

<ENTER FILE NAME>
    tabel.html

<ENTER FILE CONTENTS>
    <center><table border=2><tr><td width=100 height=100><center>Hey YOU!</center></td></tr></table></center>


eksempel 2:

<ENTER PATH>
    c:\windows

<ENTER FILE NAME>
    Fil navn.txt

<ENTER FILE CONTENTS>
    Bla, bla, bla... Her er indholdet af txt-filen!


Udover <ENTER PATH> tager den forhold til store eller små bogstaver :)
Avatar billede Slettet bruger
04. december 2005 - 15:13 #37
Hej igen Nicolaj... Kan sku ikke få din "filåbner" til at du...
:(
Avatar billede maqhem Nybegynder
04. december 2005 - 16:47 #38
kan du få de andre til at du?
Avatar billede Slettet bruger
04. december 2005 - 16:49 #39
Yes sir!
Avatar billede arne_v Ekspert
04. december 2005 - 16:50 #40
slet må bare være

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    string fnm;
    cout << "Indtast filnavn:";
    getline(cin,fnm);
    remove(fnm.c_str());
    return 0;
}
Avatar billede maqhem Nybegynder
04. december 2005 - 16:51 #41
hmm.. Jeg kan godt få den til at du... Hvad skriver du i <ENTER PATH> og <ENTER FILE NAME>?

(her hedder den godt nok root, men pyt skidt)
Avatar billede arne_v Ekspert
04. december 2005 - 16:52 #42
zipper har vist hvordan du åbner en fil

men et svar for rename & remove
Avatar billede maqhem Nybegynder
04. december 2005 - 16:53 #43
nix. Duer ikke (vi bruger begge to VC++)
Avatar billede maqhem Nybegynder
04. december 2005 - 16:54 #44
Kan du ikke få de andre til at du, 2? Altså dem jeg har lavet? For de duer hos mig, og vi bruger trods alt samme version :)
Avatar billede maqhem Nybegynder
04. december 2005 - 16:57 #45
Er der detsuden en funktion der gør VC++ opmærksom på, at alle koderne mellem { og } foregår hér:

C:\Windows<

?
Avatar billede maqhem Nybegynder
04. december 2005 - 16:57 #46
hovsa, < skulle ikke have været der
Avatar billede arne_v Ekspert
04. december 2005 - 16:59 #47
prøv

#include <io.h>

og

chdir("C:\\windows");
Avatar billede maqhem Nybegynder
04. december 2005 - 17:00 #48
hvad gør den?
Avatar billede maqhem Nybegynder
04. december 2005 - 17:01 #49
hov! ups, min fejl
Avatar billede maqhem Nybegynder
04. december 2005 - 17:02 #50
Men hvad nu hvis jeg så vil skifte sti igen, bliver det så bare til

chdir("C:\\(...)");

og så foregår følgende koder dér?
Avatar billede arne_v Ekspert
04. december 2005 - 17:06 #51
ja
Avatar billede maqhem Nybegynder
04. december 2005 - 17:07 #52
Så hvis jeg prøver med ovenstående funktion der opretter en fil, så kommer den (eksempelvis) til at hedde:

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

string sti;
string fil_navn;
string fuld_sti;
string indhold;

int main(){
    chdir("C:\\Documents and Settings\\<BRUGER>\\Skrivebord");
    cout << "Enter path:\n";
    getline(cin,sti);
    cout << endl;
    cout << "Enter file name:\n";
    cout << sti << "\\>";
    getline(cin,fil_navn);
    cout << endl;
    cout << "Enter file contents:";
    cout << endl;
    getline(cin,indhold);
    fuld_sti = sti + "\\" + fil_navn;
    cout << endl << endl << endl << "Creating file...";
    ofstream extern_fil(fuld_sti.c_str());
    extern_fil << indhold;
    cout << endl << endl << endl << "File created!";
    cout << endl << endl << endl;
    system("pause");
}

ikke??
Avatar billede maqhem Nybegynder
04. december 2005 - 17:09 #53
mangler lige en # foran første include
Avatar billede arne_v Ekspert
04. december 2005 - 17:10 #54
hvis du angiver fuld sti når du opretter fil behøver du ikke chdir
Avatar billede maqhem Nybegynder
04. december 2005 - 17:14 #55
Den skriver:

Visual C++ 2005 Ekspress Edition
There were building errors. Would you like to continue and run the last successful building?

Yes  No

Do not show this dialog again
Avatar billede maqhem Nybegynder
04. december 2005 - 17:16 #56
Det skriver den hver gang der er fejl... :( Men udkommenterer jeg linien duer det
Avatar billede maqhem Nybegynder
04. december 2005 - 17:18 #57
2!

Kan jeg ikke få at vide, hvad du skriver i <ENTER PATH> og <ENTER FILE NAME>?
Avatar billede arne_v Ekspert
04. december 2005 - 17:19 #58
hvilken linie ?
Avatar billede maqhem Nybegynder
04. december 2005 - 17:19 #59
I mit script der åbner/gerne skulle åbne en fil
Avatar billede maqhem Nybegynder
04. december 2005 - 17:20 #60
Ehm. Den skriver ikke noget med linier
Avatar billede arne_v Ekspert
04. december 2005 - 17:24 #61
"Men udkommenterer jeg linien duer det"

hvilken linie ?
Avatar billede maqhem Nybegynder
04. december 2005 - 17:25 #62
Den linie hvor jeg skrev det dér med chdir
Avatar billede maqhem Nybegynder
04. december 2005 - 17:31 #63
Og så kunne du tilfældigvis ikke fortælle mig hvordan man kreerer grafiske ellementer udelukkende med vores version af C++? ;p
Avatar billede arne_v Ekspert
04. december 2005 - 17:31 #64
prøv evt. at inkludere direct.h fremfor io.h
Avatar billede maqhem Nybegynder
04. december 2005 - 17:34 #65
Du er jo for sej! Så duer skidtet :D
Avatar billede maqhem Nybegynder
04. december 2005 - 17:37 #66
Og så liige: Hvordan laver man arrays? Det kan jeg ikke helt finde ud af.... :(
Avatar billede arne_v Ekspert
04. december 2005 - 17:45 #67
int a[10];

er et int array med 10 elementer
Avatar billede maqhem Nybegynder
04. december 2005 - 17:47 #68
og hvad vil et int array sige?
Avatar billede arne_v Ekspert
04. december 2005 - 17:49 #69
at du har 10 int som du kan bruge som a[0], ... , a[9]
Avatar billede maqhem Nybegynder
04. december 2005 - 17:50 #70
men hvad er det der int? main-funktionen hedder jo også int, men hvad er det i sig selv?
Avatar billede arne_v Ekspert
04. december 2005 - 17:57 #71
int angiver at det er heltal
Avatar billede maqhem Nybegynder
04. december 2005 - 18:01 #72
arh. Nice. Men hvor placeres denne funktion? Er det som en string som hér:

#include (includes...)

string int mit_array[10];
string syv;

int main(){
    mit_array[10]=["01","02","03","04","05","06","07","08","09","10"];
    syv = mit_array[6];
}

eller hvad?
Avatar billede maqhem Nybegynder
04. december 2005 - 18:20 #73
Er det sådan helt ulovligt at svare på dette spørgsmål?
Avatar billede arne_v Ekspert
04. december 2005 - 19:34 #74
string int mit_array[10];

duer ikke

string mit_array[10];

eller

int mit_array[10];
Avatar billede maqhem Nybegynder
04. december 2005 - 19:38 #75
Men hvad nu hvis jeg vil starte et array med kun et element fra starten af, og jeg hen ad vejen vil tilføje flere værdier.

Og så vil jeg også kunne fjerne værdierne igen selvfælgelig :)
Avatar billede arne_v Ekspert
04. december 2005 - 19:44 #76
så skal du over i STL vector eller lignende
Avatar billede maqhem Nybegynder
04. december 2005 - 19:50 #77
okay
Avatar billede maqhem Nybegynder
04. december 2005 - 19:51 #78
Og så vil jeg i øvrigt også lige smide et svar, for jeg ved dog, at mine C++ scripts virker :)
Avatar billede arne_v Ekspert
04. december 2005 - 19:51 #79
det skal iøvrigt være
#include <iostream>
#include <string>

using namespace std;

string mit_array[10] = {"01","02","03","04","05","06","07","08","09","10"};
string syv;

int main()
{
    syv = mit_array[6];
    cout <<  syv << endl;
    return 0;
}
Avatar billede maqhem Nybegynder
04. december 2005 - 19:52 #80
men hvad skal den dér return 0; gøre godt for???
Avatar billede arne_v Ekspert
04. december 2005 - 19:57 #81
det er status fra program til styre systemet
Avatar billede maqhem Nybegynder
04. december 2005 - 21:06 #82
og nu ville jeg utroligt gerne vide, hvordan man tester om et directory er tilgængeligt. Kan du stikke mg koden til det?
Avatar billede maqhem Nybegynder
04. december 2005 - 21:12 #83
og hvilke underfiler og -mapper der er tilgængelige i et bestemt directory
Avatar billede Slettet bruger
05. december 2005 - 16:20 #84
Tja, Nicolaj, det burde være DIG  der gav arne_v pointene...
Hehe!
Nå, pyt, tak for hjælpen!
Avatar billede maqhem Nybegynder
06. december 2005 - 07:57 #85
hvor er du ond ;P
nå pyt, det drejer sig jo kun om 15 point, fik du det forresten til at du?
Avatar billede Slettet bruger
01. april 2006 - 08:22 #86
NÅ!
Det er DIG, der er maqhem!
Hvorfor f*ck skal du absolut skifte nanv?!
Avatar billede Slettet bruger
01. april 2006 - 08:22 #87
*navn
Avatar billede maqhem Nybegynder
01. april 2006 - 10:41 #88
zipper-znake er da lamt
Avatar billede Slettet bruger
01. april 2006 - 18:57 #89
JA!!!
Fat det!
Og det har aldrig været 'zipper' - var der ikke 'cyber', du mente til at starte med?!
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