Zielordner Netzwerkumgebung????



  • Hallo zusammen!

    Ich habe folgendes Problem:
    Ich verschaffe mit den lokalen Ortner Netzwerkumgebung. Mit einer selbstgeschriebenen Funktion durchsuche in den Ordner mit . und kopiere alle Dateien/Ordner, die einen bestimmten String enthalten. Das Problem ist nun, dass nicht etwa die Ordner sammt Inhalt kopiert werden, sondern lediglich eine Verknüpfung zum betreffenden Ordner erstellt wird.

    Wenn ich in der Netzwerkumgebung auf einen (von einem anderen Computer) freigegebenen Ordner klicke und mir dessen Eigenschaften anzeigen lasse, kann ich deren Zielpfad auslesen (z.b.\\computername\Ordner1).
    wenn ich diesen Ordner als Kopierordner angebe, wird auch dessen Inhalt kopiert.
    An diese Eigenschaft möchte ich ran!

    Jedoch sind bis jetzt jegliche Versuche gescheitert!

    Habt ihr eine Lösung?

    Möglich muss es sein, da es Windows ja auch hinbekommt.

    Wie so oft vermute ich mal, dass ich hier im 'Falschen Teilforum bin ... wie dem auch sei!

    Ich hoffe jmd kann mir helfen oder hatte das gleiche Problem, so dass er eine Lösung finden konnte.

    Vielen Dank & Liebe Grüße!



  • Hat keiner eine Idee?



  • womit machst du das denn alles?
    Nimmst du FindFirstFile/FindNextFile und CopyFile oder wie machst du das?

    schirrmie



  • Ja .... die kopier Funktion habe ich mir selber geschrieben ... blaube irgendwo aus dem Forum ...

    Hier mal der gesamte Code:

    bool SnapshotFiles ( String startVerzeichnis, String zielVerzeichnis ){
    bool bMore; 
    WIN32_FIND_DATA wfd; 
    HANDLE handle; 
    String szMask; 
    String szFullName; 
    String szTargetName; 
    int m_ctlStaticFile = 0; 
    
    mkdir(zielVerzeichnis.c_str()); //Zielverzeichnis erstellen
    szMask = startVerzeichnis + "\\*.*"; //Suchmaske für FindFirstFile 
    handle = ::FindFirstFile(szMask.c_str(), &wfd); 
    bMore = handle != INVALID_HANDLE_VALUE; 
    
    while(bMore){ 
    if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ 
    if( ((strcmp(wfd.cFileName, ".") != 0) && (strcmp(wfd.cFileName, "..") != 0)) ){ // filename is a directory 
    
    szFullName = startVerzeichnis + "\\" + wfd.cFileName;
    szTargetName = zielVerzeichnis + "\\" + wfd.cFileName;
    mkdir(szTargetName.c_str()); //Ziel-Unterverzeichnisse erstellen 
    
    SnapshotFiles(szFullName, szTargetName); //Funktion rekursiv aufrufen 
    }/*if*/ 
    }/*if*/ 
    else{ 
    String SourceFile = startVerzeichnis + "\\" + wfd.cFileName;
    String TargetFile = zielVerzeichnis + "\\" + wfd.cFileName; 
    
    ::CopyFile(SourceFile.c_str(), TargetFile.c_str(), FALSE); //Datei wird kopiert (FALSE = überschreiben, falls vorhanden) 
    
    MSG msg; 
    int Return = PeekMessage(&msg, NULL,0,0,PM_REMOVE); 
    if(Return!=0){ 
    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
    } 
    
    }/*else*/ 
    bMore = ::FindNextFile(handle,&wfd); 
    }/*while*/ 
    if (handle!=INVALID_HANDLE_VALUE){ 
    ::FindClose(handle); 
    return true; 
    } 
    }
    
    void __fastcall TForm1::FileListKeyPress(TObject *Sender, char &Key)
    {
    try {
       if (Key == 'r') //F5
       {
          AnsiString Verzeichnis = "";
          /*
          if(!SUCCEEDED(SHGetFolderPath(0, CSIDL_NETHOOD, 0, SHGFP_TYPE_CURRENT, Verzeichnis.c_str())))
          {
             MessageBox(0, "Verzeichnis nicht gefunden", "Error", MB_OK);
             return;
          }
          Verzeichnis = AnsiString(Verzeichnis.c_str())+"\\";
          */
          SendMessage(FileList->Handle, WM_SETREDRAW, FALSE, 0);
    
          WIN32_FIND_DATA fd;
          HANDLE hFile = FindFirstFile((Verzeichnis+"*.*").c_str(), &fd);
    
          if(hFile == INVALID_HANDLE_VALUE)
          {
             MessageBox(0, "Verzeichnis nicht gefunden", "Error", MB_OK);
             return;
          }
    
          do
          {
             if(strcmp(fd.cFileName, "..") && strcmp(fd.cFileName, "."))
             {
                DWORD FileAttribute = GetFileAttributes((Verzeichnis+fd.cFileName).c_str());
    
                if (!(FileAttribute&FILE_ATTRIBUTE_HIDDEN))
                {
                   SnapshotFiles(Verzeichnis+fd.cFileName, "C:\\testTEMP\\");
    
                   if (FileList->Items->IndexOf(fd.cFileName) == -1)
                   {
                      FileList->Items->Add(fd.cFileName);
                      int index = FileList->Items->IndexOf(fd.cFileName);
                      if (index != -1)
                      {
                         FileList->Checked[index] = true;
                      }
                   }
                }
             }
          }
          while(FindNextFile(hFile, &fd));
    
          FindClose(hFile);
    
          SendMessage(FileList->Handle, WM_SETREDRAW, TRUE, 0);
       }
    }
    catch (...) {}
    }
    //---------------------------------------------------------------------------
    


  • der auskommentierte Teil soll wieder reinkommentiert werden ...



  • Öhm, irgendwie ziemlicher Spaghetti-Code. Warum hast Du beispielsweise eine Message-Loop in Deiner 'SnapshotFiles-Funktion' ?



  • hm ... die Funktion habe ich 1 zu 1 übernommen ...


Anmelden zum Antworten