/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Kopiere filer
Fra : Rasmus


Dato : 01-11-01 17:27

Hejsa!
Hvordan kan jeg i Borland C++Builder kopiere filer.
Altså en code som fx. kopiere "c:\proeve.exe" til "C:\Cpp\".
Venlig Hilsen
Rasmus Steffensen



 
 
Kent Friis (01-11-2001)
Kommentar
Fra : Kent Friis


Dato : 01-11-01 20:15

Den Thu, 1 Nov 2001 17:26:50 +0100 skrev Rasmus:
>Hejsa!
>Hvordan kan jeg i Borland C++Builder kopiere filer.
>Altså en code som fx. kopiere "c:\proeve.exe" til "C:\Cpp\".
>Venlig Hilsen
>Rasmus Steffensen

Åbne to filer
læse fra den ene
skrive til den anden
lukke begge filer.

Mvh
Kent
--
http://www.celebrityshine.com/~kfr/

Ivan Johansen (01-11-2001)
Kommentar
Fra : Ivan Johansen


Dato : 01-11-01 20:55

Rasmus wrote:

> Hejsa!
> Hvordan kan jeg i Borland C++Builder kopiere filer.
> Altså en code som fx. kopiere "c:\proeve.exe" til "C:\Cpp\".

Kent angav standardmåden at gøre det på. En anden måde er at anvende
WinAPI'et, f.eks. CopyFile():
CopyFile("c:\proeve.exe", "C:\Cpp\proeve.exe", false);

Funktionen CopyFileEx() giver lidt flere muligheder. Du kan også anvende
SHFileOperation(), som vise den kendte progress dialog.

Funktionerne står beskrevet i Windows SDK, som følger med BCB.

Ivan Johansen




Igor V. Rafienko (01-11-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 01-11-01 21:09

[ Ivan Johansen ]

[ snip ]


> Kent angav standardmåden at gøre det på. En anden måde er at anvende
> WinAPI'et, f.eks. CopyFile():
> CopyFile("c:\proeve.exe", "C:\Cpp\proeve.exe", false);


For det første er det unødvendig å bruke slike platformspesifikke ting
når det finnes en _standard_ løsning som _også_ vil fungere andre
steder enn windows.

For det andre tviler jeg sterkt på at koden over vil gjøre det OP
ville.





ivr
--
Documentation is like sex: when it is good, it is very, very good; and
when it is bad, it is better than nothing.
                  -- Dick Brandon

Ivan Johansen (01-11-2001)
Kommentar
Fra : Ivan Johansen


Dato : 01-11-01 23:09

Igor V. Rafienko wrote:

>>CopyFile("c:\proeve.exe", "C:\Cpp\proeve.exe", false);
> For det første er det unødvendig å bruke slike platformspesifikke ting
> når det finnes en _standard_ løsning som _også_ vil fungere andre
> steder enn windows.
>

Jeg er enig i at platformsuafhængighed normalt er at foretrække. Ud fra
Rasmus' tidligere spørgsmål fremgår det dog klart at han avender klasser
og funktioner som er specifikke for Borland C++ Builder. Derfor syntes
jeg at jeg ville gøre opmærksom på at der findes en funktion i Windows
API'et, der kan kopiere en fil. Egentlig burde en sådan funktion være en
del af standarden, efter min mening. Men du har ret. Normalt bør man
forsøge at skrive portabelt kode, selv om koden ikke bliver porteret
alligevel.

> For det andre tviler jeg sterkt på at koden over vil gjøre det OP
> ville.

Du har ret, der er en fejl. Der skulle selvfølgelig have stået:
CopyFile("c:\\proeve.exe", "C:\\Cpp\\proeve.exe", false);

Ivan Johansen


Igor V. Rafienko (02-11-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 02-11-01 15:56

[ Ivan Johansen ]

[ snip ]

> Jeg er enig i at platformsuafhængighed normalt er at foretrække. Ud
> fra Rasmus' tidligere spørgsmål fremgår det dog klart at han avender
> klasser og funktioner som er specifikke for Borland C++ Builder.


Fortell meg hvorfor forslaget ditt er bedre enn:

void
copyfile( const std::string &dstname,
    const std::string &srcname )
{
std::ifstream ifs( srcname.c_str() );
std::ofstream ofs( srcname.c_str() );

ifs.exceptions( std::ios_base::failbit, std::ios_base::badbit );
ofs.exceptions( std::ios_base::failbit, std::ios_base::badbit );

ofs << ifs.rdbuf();
}

(performance er potensielt sett et argument, _men_ det synes meg å
være unødvendig å dra dette med i bildet i denne konteksten).

Det er flott at Win API'et har en kopieringsfunksjon. Det er bare at
koden over er ikke lengre enn koden som er windows-spesifikk.


> Derfor syntes jeg at jeg ville gøre opmærksom på at der findes en
> funktion i Windows API'et, der kan kopiere en fil. Egentlig burde en
> sådan funktion være en del af standarden, efter min mening.


Den er det allerede. Jfr. over.


> Men du har ret. Normalt bør man forsøge at skrive portabelt kode,
> selv om koden ikke bliver porteret alligevel.


Flott.

[ snip ]





ivr
--
Good news everyone: I've taught the toaster to feel love
         Pr. Farnsworth, Futurama

Igor V. Rafienko (02-11-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 02-11-01 16:00

[ Igor V. Rafienko ]

[ snip ]


> void
> copyfile( const std::string &dstname,
>     const std::string &srcname )
> {
> std::ifstream ifs( srcname.c_str() );
> std::ofstream ofs( srcname.c_str() );


Ehh...

std::ofstream ofs( dstname.c_str() );

naturligvis. Beklager rotet.





ivr
--
Good news everyone: I've taught the toaster to feel love
         Pr. Farnsworth, Futurama

Anders Munch (03-11-2001)
Kommentar
Fra : Anders Munch


Dato : 03-11-01 16:12

"Igor V. Rafienko" <igorr@ifi.uio.no> wrote in message news:xjv668tql1y.fsf@olmur.ifi.uio.no...
> Fortell meg hvorfor forslaget ditt er bedre enn:
>
> void
> copyfile( const std::string &dstname,
> const std::string &srcname )
> {
> std::ifstream ifs( srcname.c_str() );
> std::ofstream ofs( srcname.c_str() );
>
> ifs.exceptions( std::ios_base::failbit, std::ios_base::badbit );
> ofs.exceptions( std::ios_base::failbit, std::ios_base::badbit );
>
> ofs << ifs.rdbuf();
> }

Platformsuafhængighed er en god ting, men det der vil aldrig komme til
at virke godt. En sådan hjemmestrikket kopieringsfunktion kan - selv
efter at de mest åbenlyse bugs er rettet - maltraktere filer og
directories på utallige måder.

På de fleste platforme er der mere til en fil end dens navn og de
bytes, den indeholder. En stribe ifdef's der vælger mellem et antal
platform-specifikke løsninger er at foretrække.

mvh.
Anders

--
Anders Munch, softwareudvikler
Stadig forvirret men på et højere niveau. Fjern fra min emailadresse.



Ivan Johansen (04-11-2001)
Kommentar
Fra : Ivan Johansen


Dato : 04-11-01 22:11

Igor V. Rafienko wrote:

> Fortell meg hvorfor forslaget ditt er bedre enn:

Mit forslag er ikke bedre, bare alternativt.

>>Derfor syntes jeg at jeg ville gøre opmærksom på at der findes en
>>funktion i Windows API'et, der kan kopiere en fil. Egentlig burde en
>>sådan funktion være en del af standarden, efter min mening.
>>
>
> Den er det allerede. Jfr. over.

Der er ikke nogen standardfunktion, der kopierer filer. Du har lavet en
funktion, der kopierer filer uden rettigheder og andre attributter.

Ivan Johansen


Igor V. Rafienko (04-11-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 04-11-01 22:33

[ Ivan Johansen ]

[ snip ]

> Der er ikke nogen standardfunktion, der kopierer filer. Du har lavet
> en funktion, der kopierer filer uden rettigheder og andre
> attributter.


Jupp, jeg kom på det i ettertid. OTOH, kan man knytte alle de
interessante filattributtene til en streambuf som refererer til denne
filen? Isåfall kunne op<<() "kopiere" også disse.





ivr
--
"Ma belle demoiselle, repondit Candide, quand on est amoureux, jaloux
et fouette par l'Inquisition, on ne se connait plus"
            Voltaire, "Candide"

Thomas Krog (01-11-2001)
Kommentar
Fra : Thomas Krog


Dato : 01-11-01 23:25

Hvis du vælger at bruge standard c++ hedder de to stier:

std::ifstream fo("C:/proeve.exe");
std::ofstream fo("C:/Cpp/proeve.exe");

dvs / istedet for \ også selvom du bruger windows



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste