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 fra FPT Software
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