Avatar billede rasmus-madsen Nybegynder
26. september 2004 - 00:06 Der er 22 kommentarer og
1 løsning

skriv til fil.

Hejza igen..
Prøver at skrive til en txt fil, men den skriver kun første tegn til filen.. Ved nogen hvorfor ?:
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    char bruger;
    cout << "Indtast navn";
    cin >> bruger;
    ofstream out("fil.txt");
    if(!out){
        cout << "Cannot open file";
        return 1;
    }
out << bruger;
out.close();
  return 0;
}
Avatar billede arne_v Ekspert
26. september 2004 - 00:08 #1
char bruger;

->

char bruger[100];
Avatar billede rasmus-madsen Nybegynder
26. september 2004 - 00:10 #2
takker.. Men hvorfor skal der [100] bagefter ?
Avatar billede bertelbrander Novice
26. september 2004 - 00:14 #3
char x er én char, char x[100] er et array af 100 char's

Iøvrigt bør man ikke bruge >> med char array's brug getline.
Avatar billede rasmus-madsen Nybegynder
26. september 2004 - 00:16 #4
takker bertel..

Ved du om man kan tjecke hvad for ewt brugernavn man logget ind med ?
Avatar billede rasmus-madsen Nybegynder
26. september 2004 - 00:16 #5
ext = et
Avatar billede bertelbrander Novice
26. september 2004 - 00:17 #6
Eksempel på getline:

char xx[100];
cin.getline(xx, sizeof(xx));
Avatar billede arne_v Ekspert
26. september 2004 - 00:18 #7
Prøv:

char usr[32];
int urslen = sizeof(usr);
GetUserName(usr,&usrlen);
Avatar billede bertelbrander Novice
26. september 2004 - 00:19 #8
Eller: getenv("USERNAME") der returnerer en char * (eller 0)
Avatar billede rasmus-madsen Nybegynder
26. september 2004 - 00:19 #9
jeg for fejl
Avatar billede rasmus-madsen Nybegynder
26. september 2004 - 00:20 #10
bertel det virker for hårdt :D
Avatar billede rasmus-madsen Nybegynder
26. september 2004 - 00:23 #11
Jeg skal nok oprette et nyt spm om dette, men vil lige hører...

Ang den kode som kopirer filer. Kan man gøre  sådan at hvis filens redigeret dato tid er større må den overskrive, ellers ikke ?
Avatar billede bertelbrander Novice
26. september 2004 - 00:25 #12
I arnes eksempel skal usrlen vist være en DWORD for at alle C++ kompilere vil kompilere, og det skal staves ens hver gang.
Avatar billede arne_v Ekspert
26. september 2004 - 00:27 #13
WIN32_FIND_DATA indeholder:

  FILETIME ftCreationTime;
  FILETIME ftLastAccessTime;
  FILETIME ftLastWriteTime;

så ja det kan godt laves
Avatar billede bertelbrander Novice
26. september 2004 - 00:27 #14
Man kan godt checke om filen er nyere inden man overskriver, skal det være arnes eller mit eksempel du vil bruge?
Avatar billede rasmus-madsen Nybegynder
26. september 2004 - 00:27 #15
jeg brugte din måde.. Og den virker ...

Ved du om det andet der var muligt = (sidste post af mig.)
Avatar billede arne_v Ekspert
26. september 2004 - 00:28 #16
DWORD og int plejer at være kompatible i de fleste compilere, men principielt
bør man vel anvende de præcise typer.

urslen skal naturligvis være usrlen.
Avatar billede rasmus-madsen Nybegynder
26. september 2004 - 00:28 #17
har denne kode af arnes med kopiren af filer:
void copy_recursive(char *fradir, char* tildir);

void copy(WIN32_FIND_DATA *fnddat, char *fradir, char*tildir)
{
  char fullfra[MAX_PATH],fulltil[MAX_PATH];
  if(fnddat->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  {
      if(fnddat->cFileName[0]!='.')
      {
        sprintf(fullfra,"%s%s\\",fradir,fnddat->cFileName);
        sprintf(fulltil,"%s%s\\",tildir,fnddat->cFileName);
        CreateDirectory(fulltil,NULL);
        copy_recursive(fullfra,fulltil);
      }
  }
  else
  {
      sprintf(fullfra,"%s%s",fradir,fnddat->cFileName);
      sprintf(fulltil,"%s%s",tildir,fnddat->cFileName);
      CopyFile(fullfra,fulltil,1);
  }
}

void copy_recursive(char *fradir, char*tildir)
{
  WIN32_FIND_DATA data;
  char spec[MAX_PATH];
  sprintf(spec,"%s*.*",fradir);
  HANDLE h = FindFirstFile(spec,&data);
  if(h!=INVALID_HANDLE_VALUE) {
    copy(&data,fradir,tildir);
    while(FindNextFile(h,&data)) {
      copy(&data,fradir,tildir);
    }
  }
  FindClose(h);
}
  copy_recursive("C:\\tester\\mappe1\\","C:\\tester\\mappe2");

Der vil jeg gerne have lavet det andet i..
Avatar billede rasmus-madsen Nybegynder
26. september 2004 - 00:29 #18
ok.. begge jeres eksempler virker..
Avatar billede rasmus-madsen Nybegynder
26. september 2004 - 00:31 #19
jeg kan også bare forhøje pointsne i dette spm... istedet for at oprette et nyt
Avatar billede bertelbrander Novice
26. september 2004 - 00:35 #20
> Arne:

D:\Program>cat t.cpp
#include <windows.h>
#include <stdlib.h>

int main(void)
{
  char Buf[32];
  int i = sizeof(Buf);
  GetUserName(Buf, &i);
}


D:\Program>g++ -W -Wall t.cpp -o t.cpp
t.cpp: In function `int main()':
t.cpp:8: error: invalid conversion from `int*' to `DWORD*'

D:\Program>g++ --version
g++ (GCC) 3.3.1 (mingw special 20030804-1)
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Avatar billede rasmus-madsen Nybegynder
26. september 2004 - 00:43 #21
arne hvis du svarer på denne er det fint.. har oprettet et nyt spm med den nye problem..
Avatar billede arne_v Ekspert
26. september 2004 - 10:06 #22
svar
Avatar billede arne_v Ekspert
26. september 2004 - 10:13 #23
bertel>

Du har helt ret. int* -> DWORD* duer ikke. Jeg må have tænkt på int->DWORD.
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