PDA

View Full Version : GESTIONE TXT IN C++


xxxantoxxx
25-05-2005, 11:29
Sono nuovo del forum, dunque non so se sia questa la sezione giusta per la mia domanda. Sto da poco studiando il C++, usando anche il builder, e volevo sapere se esiste un programma in c++/c++ builder, ossia del codice che mi permetta di aprire un file txt, leggerne il contenuto/modificarne il contenuto etc... PLEASE! Sono un pò disperato...

anx721
25-05-2005, 11:36
devi utilizzare le classi per gli stream di input output che c++ include nella sua libreria standard....

Ziosilvio
25-05-2005, 12:03
volevo sapere se esiste un programma in c++/c++ builder, ossia del codice che mi permetta di aprire un file txt, leggerne il contenuto/modificarne il contenuto etc...
C++ è un linguaggio Turing-completo, pertanto tale programma esiste certamente.

Scherzi a parte: puoi fare tutto quello che hai detto semplicemente usando le funzioni della libreria standard --- libreria che ti consiglio di studiare attentamente e approfonditamente.

xxxantoxxx
26-05-2005, 08:43
Purtroppo però non ho le conoscenze adatte... io ho scritto, seguendo quanto avete detto su un altro post:

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

int main (int argc, char *argv[])
{
ifstream file_leggi("C:\prova.txt");
ofstream file_scrivi("C:\prova2.txt");

if (! file_leggi) cerr << “Errore nell_aprire il file di ingresso”
if (! file_scrivi) cerr << “Errore nell_aprire il file su cui scrivere”

string stringa_da_copiare;
string stringa_da_cambiare="modifica da applicare";
int contaRiga=0;
int modRiga=3;

while(getline(file_leggi,stringa_da_copiare))
{
file_scrivi<<((contaRiga!=modRiga)?daCopiare:daCambiare)<<endl;
contaRiga++;
}

return 0;
}

ma non mi funziona... Cosa sbaglio?

RaouL_BennetH
26-05-2005, 14:40
sinceramente, non ho capito molto dal tuo esempio. La colpa è ovviamente mia che sono agli inizi. Volevo solo postarti quello che sono riuscito a fare per copiare un file su un altro file. Non badare tanto al mio codice perchè davvero sono un niubbone, ma spero ti dia almeno un'idea:


#include <iostream>
#include <fstream>

using namespace std;
int main (int argc, char **argv)
{
ifstream in;
ofstream out;
char testo;

in.open ("c:\prova.txt");
out.open ("c:\prova2.txt");

in.get(testo);

while (!in.eof()) {

out << testo;
in.get(testo);
}

in.close();
out.close();

}

71104
26-05-2005, 16:23
non testato:

#include <windows.h>

int main() {
HANDLE hSrc = CreateFileA("file1.txt",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0, NULL);
HANDLE hDst = CreateFileA("file2.txt",
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
0, NULL);
if (hSrc && hDst) {
char pBuf[0x1000];
DWORD dwBufSize = 0x1000,
dwRead = 0;
while (ReadFile(hSrc, (LPVOID)pBuf, dwBufSize, &dwRead, NULL)) {
DWORD dwDummy;
WriteFile(hDst, (LPVOID)pBuf, dwRead, &dwDummy, NULL);
if (dwRead < dwBufSize) {
break;
}
}
}
if (hSrc) {
CloseHandle(hSrc);
}
if (hDst) {
CloseHandle(hDst);
}
return 0;
}


EDIT: testato e funzionante :p

sirus
26-05-2005, 17:27
che cattivone che sei...
è un novizio e tu scrivi quella robaccia :sofico:

RaouL_BennetH
26-05-2005, 17:50
non testato:

#include <windows.h>

int main() {
HANDLE hSrc = CreateFileA("file1.txt",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0, NULL);
HANDLE hDst = CreateFileA("file2.txt",
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
0, NULL);
if (hSrc && hDst) {
char pBuf[0x1000];
DWORD dwBufSize = 0x1000,
dwRead = 0;
while (ReadFile(hSrc, (LPVOID)pBuf, dwBufSize, &dwRead, NULL)) {
DWORD dwDummy;
WriteFile(hDst, (LPVOID)pBuf, dwRead, &dwDummy, NULL);
if (dwRead < dwBufSize) {
break;
}
}
}
if (hSrc) {
CloseHandle(hSrc);
}
if (hDst) {
CloseHandle(hDst);
}
return 0;
}


EDIT: testato e funzionante :p




$\/|jx+~┌┌¦ÜÆÏEäþ {
muhav_jabbaladi!! O_O @@ }



:O

sirus
26-05-2005, 18:33
$\/|jx+~┌┌¦ÜÆÏEäþ {
muhav_jabbaladi!! O_O @@ }



:O
lol :D

cionci
26-05-2005, 18:42
non testato:
L'ha chiesto in C++ forse non voelva le API ;)
Personalmente quello che si può fare con la libreria standdard lo faccio con la libreria standard, quello che non si può fare lo faccio con le API...quindi non mi sembra il caso di usare le API in un esempio per un principiante ;)

71104
26-05-2005, 18:46
vabbè, dai, ho solo dato un contributo alla maniera che mi veniva + naturale; che sia stato inutile è 1 altro discorso... :D (a parte che poi forse non sarà stato così inutile ;))

sirus
26-05-2005, 18:58
L'ha chiesto in C++ forse non voelva le API ;)
Personalmente quello che si può fare con la libreria standdard lo faccio con la libreria standard, quello che non si può fare lo faccio con le API...quindi non mi sembra il caso di usare le API in un esempio per un principiante ;)
IDEM :O
amo lo standard ;) anche se in alcuni casi le API vengono buone ;)