|
[ IDE @ 20.09.2005. 22:26 ] @
| htio bih koristiti f-ju CopyFileTo , ali nigdje ne mogu da nadjem sta da include-ujem.
bez ikakvog include-a mi borland ne prepoznaje tu f-ju...
trazio sam svuda i preko google-a, ali nista....
ako ko moze pomoci-bilo bi fino....
e, da... moze li se jos kako kopirati fajl u c/c++-u??
znam da ima jos i CopyFile, ali koliko sam nasao na net-u nesto se "zale" na nju... |
[ Gogy @ 20.09.2005. 23:08 ] @
Nisam cuo za probleme oko CopyFile funkcije.Mislim da je to najjednostavnije rjesenje na Windows platformi.
[ IDE @ 21.09.2005. 00:16 ] @
ne, ne...
nisam rekao CopyFile... nego CopyFileTo
evo sad sam upravo rijesio problem bas sa funkcijom koju si ti naveo...
znaci sa CopyFile...i to je sada ok...
e, sta me sad interesuje, zasto ne radi jedna srodna stvar (zato necu otvarati novu temu)
evo sta sam uradio...
stavio sam Edit3 i Edit4, i fora je da se u njima navede putanja dva foldera i da se prvi prekopira u drugi (tj. fajlovi sa oznacenom ekstenzijom). Npr:
Edit3->Text="c:\\prvi folder\\*.*"
Edit4->Text="d:\\drugi"
i da se onda svi fajlovi iz prvog foldera prebace u drugi...
evo problematicnog koda:
#include<system.hpp>
//------------Button1-------------
{
String a,b;
a=Edit3->Text;
b=Edit4->Text;
system("copy a.c_str() b.c_str()");
Form1->Close();
}
[ danio @ 21.09.2005. 00:41 ] @
Mozes koristiti ovako nesto:
Code:
#include <sstream>
ostringstream sstr;
String a,b;
a=Edit3->Text;
b=Edit4->Text;
sstr<<"copy "<<a<<" "<<b;
system(sstr.str().c_str());
Ali to je jako opasno! Sta ako ti neko napise u prvit edit box np a.txt a u drugi b.txt; format c:\?
Preporuca se koristenje ShellExecute
Code:
String a;
a=Edit3->Text+" "+Edit4->Text;
ShellExecute(NULL,"open","copy",a.c_str(),NULL,SW_SHOWNORMAL);
[ X Files @ 21.09.2005. 06:55 ] @
[ IDE @ 21.09.2005. 11:39 ] @
provjericu ovo sto ste mi rekli...
uglavnom, hvala vam puno na odgovorima...
[ IDE @ 21.09.2005. 13:18 ] @
u redu, za kopiranje jednog fajla koristim CopyFile, ali pri kopiranju vise fajlova nekog direktorijuma nastaje problem.
danio, ovo mi ne radi:
String a;
a=Edit3->Text+" "+Edit4->Text;
ShellExecute(NULL,"open","copy",a.c_str(),NULL,SW_SHOWNORMAL);
program jednostavno ni ne reaguje....
[ danio @ 21.09.2005. 15:24 ] @
Imas pravo. Napravio sam testove i doso do zakljucka da "copy" ne postoji kao program nego je dio shella. Nema veze, zato postoji program "xcopy.exe". Ovo sam pretestirao i radi: Code:
#include <windows.h>
#include <string>
#include <iostream>
using namespace std;
int main()
{
string a;
a=Edit3->Text+" "+Edit4->Text;
int ret=(int)ShellExecute(NULL,"open","xcopy",a.c_str(),NULL,SW_SHOWNORMAL);
switch(ret)
{
case 0: cout<<"The operating system is out of memory or resources."<<endl; break;
case ERROR_FILE_NOT_FOUND: cout<<"The specified file was not found."<<endl; break;
case ERROR_PATH_NOT_FOUND: cout<<"The specified path was not found."<<endl; break;
case ERROR_BAD_FORMAT: cout<<"The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image)."<<endl; break;
case SE_ERR_ACCESSDENIED: cout<<"The operating system denied access to the specified file."<<endl; break;
case SE_ERR_ASSOCINCOMPLETE: cout<<"The file name association is incomplete or invalid."<<endl; break;
case SE_ERR_DDEBUSY: cout<<"The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed."<<endl; break;
case SE_ERR_DDEFAIL: cout<<"The DDE transaction failed."<<endl; break;
case SE_ERR_DDETIMEOUT: cout<<"The DDE transaction could not be completed because the request timed out."<<endl; break;
case SE_ERR_DLLNOTFOUND: cout<<"The specified dynamic-link library (DLL) was not found."<<endl; break;
//case SE_ERR_FNF: cout<<"The specified file was not found."<<endl; break;
case SE_ERR_NOASSOC: cout<<"There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable."<<endl; break;
case SE_ERR_OOM: cout<<"There was not enough memory to complete the operation."<<endl; break;
//case SE_ERR_PNF: cout<<"The specified path was not found."<<endl; break;
case SE_ERR_SHARE: cout<<"A sharing violation occurred."<<endl; break;
}
system("PAUSE");
return 0;
}
[ IDE @ 21.09.2005. 21:10 ] @
ok, provjericu, hvala...
[ leka @ 22.09.2005. 16:00 ] @
CopyFileTo() je garant necija izmisljotina... Borlandova najverovatnije, jer, ako se ne varam, tako nesto ima Delphi. To nije WinAPI funkcija. Ako jeste onda je ili nesto prastaro ili nesto novo...
[ X Files @ 22.09.2005. 16:34 ] @
Funkcija je Indy-jeva, npr:
Code:
// ...
#include <idglobal.hpp>
// ...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CopyFileTo( "c:\\sql.txt", "d:\\sql.txt" );
}
// ...
[ IDE @ 29.09.2005. 22:21 ] @
nekada napisano:
"evo problematicnog koda:
#include<system.hpp>
//------------Button1-------------
{
String a,b;
a=Edit3->Text;
b=Edit4->Text;
system("copy a.c_str() b.c_str()");
Form1->Close();
}"
e kako sam glup!!
pa ne upotrebljava se "copy" za kopiranje citavog folder-a u neki drugi vec "xcopy"!!
znaci bice:
system("xcopy d:\\folder1\\folder2 d:\\folder1 ");
pa se tu jos moze umetnuti i "/e/c/q/y"...cisto da ne zapitkuje nista....
a je li neko sad zna kako da odradim da:
1. mi se komand prompt ne pokazuje pri izvrsenju ovog koda
i
2. kako da odradim da mi program provjeri da li je kopiranje izvrseno uspjesno (da bih,ako jeste, mogao zadavati u programu sljedece zadatke...-nesto kao f-ja CopyFile koja vraca "true" ako je kopiranje uspjesno izvrseno....)
ima li ko kakvu ideju??
[Ovu poruku je menjao fucking voodoo dana 29.09.2005. u 23:22 GMT+1]
[ X Files @ 30.09.2005. 05:45 ] @
Nisi pogledao onaj sajt na koji sam te uputio...
Kopiranje sa system() mi je totalno neozbiljno. Na onom sajtu koji sam ti bio
ostavio, jedno od resenja je: SHFileOperation(), mada, kada bi meni trebao takav
kod iskljucivo bih se bazirao na rekurzivni FindFirst/FindNext...
Code:
int __fastcall CopyDir( AnsiString SourceDir, AnsiString DestDir )
{
char cSDir[MAX_PATH], cDDir[MAX_PATH];
memset(cSDir, 0, MAX_PATH);
memset(cDDir, 0, MAX_PATH);
strcpy(cSDir, SourceDir.c_str());
strcpy(cDDir, DestDir.c_str());
SHFILEOPSTRUCT dfstruct;
ZeroMemory(&dfstruct, sizeof(dfstruct));
dfstruct.hwnd = Application->Handle;
dfstruct.wFunc = FO_COPY;
dfstruct.pFrom = cSDir;
dfstruct.pTo = cDDir;
dfstruct.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;
return SHFileOperation(&dfstruct);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CopyDir( "c:\\downloads\\*.*", "c:\\downloads2" );
}
[ IDE @ 30.09.2005. 11:23 ] @
isao sam na onaj sajt i cak sam na MSDN-u citao i trazio po net-u o "SHFileOperation()"
ali nakon sto mi se ucinilo dosta (nepotrebno) komplikovanim, mislio sam na brzaka smutiti nesto sa system("xcopy...
ali cu ipak na kraju mozda uraditi bas preko "SHFileOperation()"....
[ IDE @ 30.09.2005. 12:52 ] @
pokusao sam uraditi sa ovim kodom koji si mi dao, x files, i to je sve u redu, osim jedne stvari:
za razliku od CopyFile i system("xcopy... ova f-ja javlja da ne moze da izvrsi naredbu ukoliko nije sve kako treba...
npr. uradio sam sljedece:
dao sam da se kopira folder1\\*.* u folder2... i onda sam izmjenio ime folder1 u npr. folddeerr1 (znaci da mi iskopira nesto u putanji koja ne postoji (sto je vecinom i slucaj u mome programu- i to mi izmedju ostalog i treba...) ) ali ono onda izbaci nesto kao "cannot read from specified drive..."... <- e meni ovo ne treba!!!
ja hocu da mi nista ne javi ako postoji neka graska, vec samo AKO POSTOJI mogucnost da se prekopira sto sam naredio-da se to i izvrsi I da se javi programu da je izvrseno kako bi on nastavio sa zadacima, a ako se kopiranje iz nekog razloga ne moze izvrsiti-da nista ne javlja korisniku....
Mislio sam da bi pomoglo GetLastError(), ali opet javlja korisniku da ne moze da procita, i opet nisam rijesio povratnu informaciju programu da je kopiranje izvrseno...
e u tome su mi dobre bile CopyFile i system("xcopy... ali one nisu dovoljne....
ja sam gledao kako to da sredim na onome sajtu sto si mi dao, ali nisam nista uspio ....
mislis da je ovo sve nekako izvodljivo uz pomoc "SHFileOperation()" ??
[Ovu poruku je menjao fucking voodoo dana 30.09.2005. u 13:54 GMT+1]
[ X Files @ 30.09.2005. 13:56 ] @
Sve se moze sa SHFileOperation() samo treba podesiti flag-ove. Inace,
detekcija nepostojece putanje *je tvoja odgovornost*!
Code:
// ...
#include <SysUtils.Hpp>
// ...
if ( DirectoryExists( "C:\\windows\\system32" ) )
{
// kopiraj
}
else
{
// poruka o nepostojecoj putanji
}
[Ovu poruku je menjao X Files dana 30.09.2005. u 14:56 GMT+1]
[ IDE @ 30.09.2005. 15:10 ] @
ma ne...
uopste nije problem ako ne postoji putanja....
samo sam rekao da je to vrlo cesta situacija, a ne da je losa....
to ce se vrlo cesto desavati, i to je OK, ali NIJE OK ako , kad se to desi, program tj. sistem da korisniku obavjestenje da nema te lokacije!!!
znaci TO hocu da izbjegnem!!!!Necu nikakva upozorenja!! znaci: ili iskopiraj jedan folder u drugi i javi programu da si uspio (normalno ako je sve oko), ili jednostavno CUTI, nista se ne zali i ne obavjestavaj ako nisi uspio iskopirati!!!!
to je to...
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|