26. september 2004 - 18:53
Der er
12 kommentarer og 1 løsning
tjek om størrelse er ens ?
Hejza allesammen. Har denne kode: #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 << "\nFilen er nyere.: " << aSrc << std::endl; return; } if(!CopyFile(aSrc.c_str(), aDest.c_str(), false)) std::cerr << "Fejl opstaad. Kunne ikke kopiere filen: " << aSrc << std::endl; else std::cout << "\n" << 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 << "Fejl Opstaad. Beklager. " << 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); } } Men nu vil jeg gerne have lavet lidt om på det. Når scriptet støder på en fil med samme fil navn skal den. Inden tjekker hvilken fil der er sidst rettet skal den tjekke om de to filer har samme size. Hvis de ikke har det skal den så tjekke hvilken der er sidst rettet. Hvis de har samme size skal den bare kører til næste fil. Kan nogen hjælpe med det? På forhånd tak..
Annonceindlæg fra DE-CIX
26. september 2004 - 18:58
#1
Dav igen. :-) Fra filens størrelse har du allerede. FindFileData.nFileSizeLow indeholder størrelsen (op til 4 GB - derudover bruges også FindFileData.nFileSizeHigh).
26. september 2004 - 18:59
#2
Til filens størrelse kan hentes på flere måder. En af dem er: struct stat buf; stat("filbvn.dat",&buf); så vil buf.st_size indeholde størrelsen.
26. september 2004 - 19:02
#3
Mere Windows agtigt: GetFileSize("filnavn.dat", NULL) vil returnere størrelsen (op til 4 GB - derover skal man sende et argument med over i.s.f. NULL).
26. september 2004 - 19:10
#4
hehe hej igen :D .. problemmet ligger i at filerne altid vil være ældre. Der for vil jeg gerne have koden til at tjekke om filnavn.* s størrelse er det samme som den fil den har fundet.. Hvis størrelse er den samme skal den abre forsætte med næste fil. Hvis ikke skal den tjekke gøre som den pjeler med at tjekke hvilken der rettet sidst.. Kan du ikke prøve at lægge det ind i koden i spmet ?
26. september 2004 - 19:50
#5
Prøv: do { if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { if(FindFileData.nFileSizeLow != GetFileSize((aDest + FindFileData.cFileName).c_str(), NULL)) 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));
26. september 2004 - 23:17
#6
Giver fejl i linje 40: if(FindFileData.nFileSizeLow != GetFileSize((aDest + FindFileData.cFileName).c_str(), NULL))
26. september 2004 - 23:20
#7
Hvilken fejl ?
26. september 2004 - 23:21
#8
40 C:\Dev-Cpp\Same Desk\main.cpp invalid conversion from `const void*' to `void*'
26. september 2004 - 23:23
#9
Prøv: if(FindFileData.nFileSizeLow != GetFileSize((char*)(aDest + FindFileData.cFileName).c_str(), NULL))
26. september 2004 - 23:31
#10
det virker.. takker... :) .. Som altid har jeg et bonus spm til dig :D .. Hvordan opretter jeg en mappe ? på c: drevet
26. september 2004 - 23:32
#11
Det gør du jo med CreateDirectory funktione som du ogs bruger i koden ovenfor.
26. september 2004 - 23:33
#12
CreateDirectory("C:\\mappeX", NULL);
26. september 2004 - 23:33
#13
og et svar
Kurser inden for grundlæggende programmering