Avatar billede gnyff Nybegynder
29. november 2002 - 08:47 Der er 10 kommentarer og
1 løsning

Læse og skrive til filer

Hejsa

Jeg har surfet noget rundt på ekserten, og har fundet et par spørgsmål hvor i har gemmengået det med at læse filer, men der er ingen af dem der har virket for mig i øjeblikket.

jeg ville mene at hvis jeg skulle åbne en fil skulle det se sådan du:

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

int main(){
  FILE* fp;
  fp = fopen("test.txt","r");
  while(string row=fgets(fp,1024)){
    cout<<row<<endl;
}
fclose(fp);
return 0;
}

Men det virker ikke, er der en der gider hjælpe mig med at forstå hvordan man behandler filer i c++

Man kan sikkert godt mærke at jeg er meget vnad til at arbejde med PHP :o)
Avatar billede mickni33 Nybegynder
29. november 2002 - 08:52 #1
prøv dette

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

int main(){
  FILE* fp;
string row;
string nyRow;

  fp = fopen("test.txt","r");
  while(row=fgets(fp,1024)){
    nyRow=nyRow+row;
}
fclose(fp);

cout<<nyrow<<endl;

return 0;
}
Avatar billede jpk Nybegynder
29. november 2002 - 08:53 #2
Du specificerer ikke hvor filen ligger på disken, er du sikker på den ligger i "current directory"?

Ellers kan du prøve at skrive hele stien, fx:

"C:\\test.txt" (husk dobbelt backslash)
Avatar billede gnyff Nybegynder
29. november 2002 - 09:20 #3
Ja, den ligger i samme biblotek som cpp-filen.

Men jeg får stadig fejl, hvis jeg prøver at compile den.

c:\cpp\filer.cpp 12:cannot convert 'FILE *' to 'char *' in function main()
c:\cpp\filer.cpp 12: Type mismatch in parameter '__s' (wanted 'char*', got 'FILE *') in function main()
c:\cpp\filer.cpp 12:Too few parameters in call to 'fgets(char *,int,FILE *)' in funktion main()
c:\cpp\filer.cpp 12:Illegal structure operation in function main()
c:\cpp\filer.cpp 17:Undefined symbol 'nyrow' in function main()
Avatar billede jpk Nybegynder
29. november 2002 - 11:47 #4
Du bruger jo forkerte argumenter i funktionen fgets...

#include <iostream.h>
#include <stdio.h>
#include <string>
using std::string;

int main()
{
    char row[1024];
    FILE* fp;
    fp = fopen("test.txt","r");
    while(fgets(row, 1024, fp))
    {
        cout << row << endl;
    }
    fclose(fp);
    return 0;
}
Avatar billede gnyff Nybegynder
29. november 2002 - 11:52 #5
jpk>>Mumsk, skønt, dejligt, perfekt... det virker for mig

så skal jeg bare have fundet ud af hvordan jeg skrive ind til en fil :o)
Avatar billede jpk Nybegynder
29. november 2002 - 12:04 #6
Du bruger igen fopen til at åbne/oprette en fil.
I ovenstående bruger du "r", her kan du se hvilke muligheder der er...
Fra MSDN:

"r"

Opens for reading. If the file does not exist or cannot be found, the fopen call fails.

"w"

Opens an empty file for writing. If the given file exists, its contents are destroyed.

"a"

Opens for writing at the end of the file (appending) without removing the EOF marker before writing new data to the file; creates the file first if it doesn’t exist.

"r+"

Opens for both reading and writing. (The file must exist.)

"w+"

Opens an empty file for both reading and writing. If the given file exists, its contents are destroyed.

"a+"

Opens for reading and appending; the appending operation includes the removal of the EOF marker before new data is written to the file and the EOF marker is restored after writing is complete; creates the file first if it doesn’t exist.

Du kan så bruge fputs (modsætningen til fgets), til at skrive til filen...
Avatar billede gnyff Nybegynder
29. november 2002 - 12:08 #7
Det vil sige at det er ligesom når man åbner en fil med php, og at hvis jeg skal skrive til filen er det sådan:
#include <fstream.h>

int main(){
char row;
FILE* fp;
fp = fopen("test.txt","a");
char = "Dette er en test";
fputs(fp,char);
fclose(fp)
return 0;
}
Avatar billede jpk Nybegynder
29. november 2002 - 12:37 #8
Tjo, noget lign., men du laver et par fejl:

Prøv istedet dette:

char newRow[] = "Dette er en test";
fp = fopen("test.txt","a");
fputs(newRow, fp);
fclose(fp);
Avatar billede viht Nybegynder
29. november 2002 - 17:07 #9
Ellers er der jo de udmærkede funktioner i Windows:

#include <string>
#include <windows.h>

void main() {

  string tekst = "Dette vil jeg skrive til filen";
  HANDLE hFile;
  hFile = CreateFile("c:\\minfil.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

  if(hFile != INVALID_HANDLE_VALUE) {
      if(tekst.length() > 0) {
      DWORD dwWritten;
        if( WriteFile(hFile, tekst.c_str(), tekst.length(), &dwWritten, NULL) == 0 )
          cerr << "Error writing file" << endl;
      }
      CloseHandle(hFile);
  }

  HANDLE hFile2;
  OFSTRUCT openfile;
  (HFILE*)hFile2 = OpenFile("c:\\minfil.txt", &openfile, OF_READ);
 
  char buffer[10];
  DWORD numbytesToRead = 5;
  DWORD numbytesRead;
  DWORD result;
 
  if( hFile2 != INVALID_HANDLE_VALUE) {
      while( true ) {
        result = ReadFile( hFile2, &buffer, numbytesToRead, &numbytesRead, NULL );
        if (result &&  numbytesRead == 0 )
            break;
        cout << buffer;
      }
      cout << endl;
  }
  system("pause");
}
Avatar billede viht Nybegynder
30. november 2002 - 01:22 #10
glemte lige CloseHandle(hFile2); lige før system("pause");
Avatar billede gnyff Nybegynder
19. december 2002 - 18:43 #11
Jeg skulle bare bruge en enkelt forstålig løsning, ellers tak
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