|
| 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
| |
|
|