25. september 2004 - 22:57
Der er
14 kommentarer og 1 løsning
Kopiere også undermapper ?
Hejza allesammen. Jeg fik denne kode af arne v, og syntes ikke jeg kunne presse flere ting ud af hans 50 pionts :) ... #include <stdio.h> #include <windows.h> void copy(char*fnm, char *fradir, char*tildir) { char fullfra[MAX_PATH],fulltil[MAX_PATH]; if(fnm[0]!='.') { sprintf(fullfra,"%s%s",fradir,fnm); sprintf(fulltil,"%s%s",tildir,fnm); CopyFile(fullfra,fulltil,0); } } int main() { WIN32_FIND_DATA data; HANDLE h = FindFirstFile("C:\\tester\\mappe1\\*.*",&data); if(h!=INVALID_HANDLE_VALUE) { copy(data.cFileName,"C:\\tester\\mappe1\\","C:\\tester\\mappe1\\"); while(FindNextFile(h,&data)) { copy(data.cFileName,"C:\\tester\\mappe1\\","C:\\tester\\mappe2\\"); } } FindClose(h); return 0; } Nu vil jeg gerne have den til at kopirer mapper og undermapper med også. Og hvis den støder på en fil som har samme filnavn skal den ikke gøre noget.. Kan nogen hjælpe med det ? På forhånd tak.
Annonceindlæg fra DE-CIX
25. september 2004 - 23:16
#1
Her er en løsning som ser ud til at virke: #include <stdio.h> #include <stdlib.h> #include <windows.h> void copy_recursive(char *fradir, char* tildir); void copy(WIN32_FIND_DATA *fnddat, char *fradir, char*tildir) { char fullfra[MAX_PATH],fulltil[MAX_PATH]; if(fnddat->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if(fnddat->cFileName[0]!='.') { sprintf(fullfra,"%s%s\\",fradir,fnddat->cFileName); sprintf(fulltil,"%s%s\\",tildir,fnddat->cFileName); CreateDirectory(fulltil,NULL); copy_recursive(fullfra,fulltil); } } else { sprintf(fullfra,"%s%s",fradir,fnddat->cFileName); sprintf(fulltil,"%s%s",tildir,fnddat->cFileName); CopyFile(fullfra,fulltil,0); } } void copy_recursive(char *fradir, char*tildir) { WIN32_FIND_DATA data; char spec[MAX_PATH]; sprintf(spec,"%s*.*",fradir); HANDLE h = FindFirstFile(spec,&data); if(h!=INVALID_HANDLE_VALUE) { copy(&data,fradir,tildir); while(FindNextFile(h,&data)) { copy(&data,fradir,tildir); } } FindClose(h); } int main() { copy_recursive("C:\\fradir\\","C:\\tildir\\"); return 0; }
25. september 2004 - 23:17
#2
Men jeg er ikke tilfreds med koden. Det bør kunne laves bedre.
25. september 2004 - 23:26
#3
Den overskriver desværre filerne.. Den skal ikke gøre noget hvis den finder en med samme navn.. kan man det ?
25. september 2004 - 23:34
#4
Bare erstat CopyFile(fullfra,fulltil,0); med CopyFile(fullfra,fulltil,1);
25. september 2004 - 23:36
#5
sejt takker... Da jeg er løbet tør for points, må jeg så spørger dig noget om arrays?
25. september 2004 - 23:37
#6
Ja da
25. september 2004 - 23:39
#7
Jeg ved ikke om det er bedre: #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <string> void DoCopy(std::string aSrc, std::string aDest) { if(!CopyFile(aSrc.c_str(), aDest.c_str(), false)) fprintf(stderr, "Failed to copy: %s\n", aSrc.c_str()); else printf("%s\n", aSrc.c_str()); } 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) { fprintf(stderr, "Invalid File Handle. GetLastError reports %d\n", GetLastError()); return; } else { do { if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { CreateDirectory(aDest.c_str(), 0); DoCopy(aSrc + FindFileData.cFileName, aDest + FindFileData.cFileName); } 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) { DoScan("D:\\temp1\\", "D:\\temp2\\"); return EXIT_SUCCESS; }
25. september 2004 - 23:40
#8
jeg har kigget lidt i bog jeg har om det.. Jeg vil gerne have åbnet en txt fil hvor efter den læser en linjie og putter det i array. // reading a text file #include <iostream.h> #include <fstream.h> #include <stdlib.h> using namespace std; int &put(int i); int get(int i); int vals[10]; int main () { char buffer[256]; int i; ifstream examplefile ("example.txt"); if (! examplefile.is_open()) { cout << "Error opening file"; exit (1); } while (! examplefile.eof() ) { examplefile.getline (buffer,100); put[i] = buffer; i++; } return 0; } Men det giver nogen fejl når jeg compiler det..
25. september 2004 - 23:40
#9
det hvad jeg er nået frem til
25. september 2004 - 23:43
#10
int main () { char buffer[256]; ifstream examplefile ("example.txt"); if (! examplefile.is_open()) { cout << "Error opening file"; exit (1); } while (! examplefile.eof() ) { examplefile.getline (buffer,sizeof(buffer)); // her skal sætte noget ind } return 0; }
25. september 2004 - 23:45
#11
bertel> Ja. do while i.s.f. while gør det muligt at ligge mere inde i løkken hvilket kan flytte lidt rundt så man undgår forward erklæringen. Og STL string gør at man undgår sprintf og temporære char array variable.
25. september 2004 - 23:46
#12
Hvad med noget a la: int main () { int lineno; char buffer[100][256]; ifstream examplefile ("example.txt"); if (! examplefile.is_open()) { cout << "Error opening file"; exit (1); } lineno = 0; while (! examplefile.eof() ) { examplefile.getline (buffer[lineno],sizeof(buffer[lineno])); lineno++; } return 0; }
25. september 2004 - 23:52
#13
totalt fedt.. Takker
25. september 2004 - 23:52
#14
svar lig en gang
25. september 2004 - 23:53
#15
svar
Kurser inden for grundlæggende programmering