26. september 2004 - 01:21
Der er
28 kommentarer og 1 løsning
Fejl i denne sætning ?
Hvad er fejlen i denne : fra = "c:\\Documents and Settings\\" << navn << "\\";
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
26. september 2004 - 01:54
#1
Hvad er fra og navn ? Måske: #include <string> #include <iostream> int main() { char *navn = getenv("USERNAME"); std::string fra = "c:\\Documents and Settings\\" + std::string(navn) + "\\"; std::cout << fra << std::endl; }
26. september 2004 - 10:05
#2
Eller stringstream: #include <iostream> #include <sstream> #include <string> using namespace std; int main() { char *navn = getenv("USERNAME"); stringstream fra; fra << "c:\\Documents and Settings\\" << navn << "\\"; cout << fra.str().c_str() << endl; } eller gode gamle sprintf som i mit oprindelige eksempel.
26. september 2004 - 11:09
#3
har denne her: navn = "mappe1"; navn2 = "mappe2"; if (nu == navn) { fra = "c:\\Documents and Settings\\" << navn << "\\"; til = "c:\\Documents and Settings\\" << navn2 << "\\"; } else { fra = "c:\\Documents and Settings\\" << navn2 << "\\"; til = "c:\\Documents and Settings\\" << navn << "\\"; } Og dem her: char* til; char* fra; char* nu; char* navn; char* navn2; Skal det så ikke virke ?
26. september 2004 - 11:26
#4
if (nu == navn) { skal nok være if (strcmp(nu,navn)==0) {
26. september 2004 - 11:28
#5
char til[MAX_PATH]; char fra[MAX_PATH]; ... sprintf(fra,"c:\\Documents and Settings\\%s\\",navn); sprintf(til,"c:\\Documents and Settings\\%s\\",navn2); men det kan laves på mange måder !
26. september 2004 - 11:33
#6
Jeg har brugt alt det der... if (strcmp(nu,navn)==0) { char til[MAX_PATH]; char fra[MAX_PATH]; sprintf(fra,"c:\\Documents and Settings\\%s\\",navn); sprintf(til,"c:\\Documents and Settings\\%s\\",navn2); Men det giver ingen fejl i programmet men fejl når man kører det. invalid file handle. getlasterror reports:3 Siger det dig noget ?
26. september 2004 - 11:35
#7
Jeg er ret sikker på at char til[MAX_PATH]; char fra[MAX_PATH]; skal udenfor if Men ellers skal vi nok se noget kode
26. september 2004 - 11:37
#8
ups den er også udenfor.. hele koden kommer her..: #include <windows.h> #include <fstream.h> #include <stdlib.h> #include <string> #include <iostream> using namespace std; void DoCopy(std::string aSrc, std::string aDest, FILETIME &aSrcFileTime) { WIN32_FIND_DATA FindFileData; HANDLE hFind = FindFirstFile(aDest.c_str(), &FindFileData); if(hFind != INVALID_HANDLE_VALUE && CompareFileTime(&aSrcFileTime, &FindFileData.ftLastWriteTime) < 0) { std::cout << "Dest is newer than source: " << aSrc << std::endl; return; } if(!CopyFile(aSrc.c_str(), aDest.c_str(), false)) std::cerr << "Failed to copy: " << aSrc << std::endl; else std::cout << aSrc << std::endl; } void DoScan(std::string aSrc, std::string aDest) { std::string SrcPattern = aSrc + "*"; WIN32_FIND_DATA FindFileData; HANDLE hFind = FindFirstFile(SrcPattern.c_str(), &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { std::cerr << "Invalid File Handle. GetLastError reports: " << GetLastError() << std::endl; return; } else { CreateDirectory(aDest.c_str(), 0); do { if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { DoCopy(aSrc + FindFileData.cFileName, aDest + FindFileData.cFileName, FindFileData.ftLastWriteTime); } else if(strcmp(FindFileData.cFileName, ".") && strcmp(FindFileData.cFileName, "..")) DoScan(aSrc + std::string(FindFileData.cFileName) + "\\", aDest + std::string(FindFileData.cFileName) + "\\"); } while(FindNextFile(hFind, &FindFileData)); FindClose(hFind); } } int main(void) { int lineno; char til[MAX_PATH]; char fra[MAX_PATH]; char* nu; char* navn; char* navn2; char buffer[100][256]; ifstream examplefile ("data.txt"); if (! examplefile.is_open()) { cout << "Error opening file"; exit (1); } lineno = 0; while (! examplefile.eof() ) { examplefile.getline (buffer[lineno],sizeof(buffer[lineno])); lineno++; } nu = "mappe1"; navn = "mappe1"; navn2 = "mappe2"; if (strcmp(nu,navn)==0) { sprintf(fra,"c:\\Documents and Settings\\%s\\",navn); sprintf(til,"c:\\Documents and Settings\\%s\\",navn2); } else { sprintf(fra,"c:\\Documents and Settings\\%s\\",navn2); sprintf(til,"c:\\Documents and Settings\\%s\\",navn); } cout << fra; DoScan(fra, til); return EXIT_SUCCESS; }
26. september 2004 - 11:43
#9
Prøv og udskriv SrcPattern inden du kalder FindFirstFile
26. september 2004 - 11:44
#10
Måske er det blandingen af char array og std::string som driller
26. september 2004 - 11:47
#11
Det kan jeg ikke få lov til.. Den vil ikke complikere.. cout << SrcPattern;
26. september 2004 - 11:48
#12
cout << SrcPattern.c_str() << endl;
26. september 2004 - 11:49
#13
Ups har fundet fejlen ..
26. september 2004 - 11:50
#14
det var fordi jeg havde glemt at oprette mapperne :D .. Kan man ikke lave en forspørgsel på det ? Altså om mappen eksitere. ?
26. september 2004 - 11:53
#15
Er det ikke det som du tester på med: if (hFind == INVALID_HANDLE_VALUE) (til directories oprettes jo)
26. september 2004 - 11:55
#16
hmm ved squ ikke... men det virker :) ... Smid et svar !
26. september 2004 - 11:58
#17
kommer her spørge bare igen her hvis der dukker problemer op
26. september 2004 - 11:58
#18
jeg prøver at ramme den lille cirkel ude til venstre igen :-)
26. september 2004 - 12:00
#19
det lyder godt :)
26. september 2004 - 12:03
#20
jeg har faktisk et spm mere... er det okay ?
26. september 2004 - 12:42
#21
ja
26. september 2004 - 12:46
#22
26. september 2004 - 12:47
#23
Samme problem som her. Du skal enten bruge std::string og + eller formatere strengen først med stringstream eller sprintf.
26. september 2004 - 12:49
#24
Nemer du sådan her ? std::DoScan(fra + "skrivebord\\", til + "skrivebord\\"); Det giver nemlig fejl..
26. september 2004 - 12:51
#25
Hvad med: DoScan(std::string(fra) + "skrivebord\\", std::string(til) + "skrivebord\\");
26. september 2004 - 12:57
#26
det virker .. Vil du have pointsne i det andet spm ?
26. september 2004 - 13:11
#27
Ikke nødvendigt. I modsætning til Bertel deltager heg i point ræset. Men jeg har vist fået point nok fra dig lige her og nu.
26. september 2004 - 13:11
#28
heg = jeg
26. september 2004 - 13:13
#29
Men du skal være meget opmærksom på om noget er char [] - så er det et array af chars som kan mainupleres med strxxx og sprintf char * - så er der noget der peger på et array af chars (ofte kan det og char [] bruges samme steder, men char * kan pege på en kosntant som man ikke kan ændre) string eller std::string - er et objekt som har nogle smarte metoder og overloadede operatorer
Kurser inden for grundlæggende programmering