Announcement

Collapse
No announcement yet.

Datei umbenennen scheitert ohne Fehlermeldung?!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datei umbenennen scheitert ohne Fehlermeldung?!

    Hallo,

    Ich möchte eigentlich nur eine Datei umbenennen.
    Folgendes habe ich gemacht:
    Code:
    string sInFileName = "C:\\Users\\xxx\\Desktop\\test\\Datei_BACKUP.ini";
    string sOutFileName = "C:\\Users\\xxx\\Desktop\\test\\Datei.ini";
    
    // 1. Versuch
    rename( sOutFileName.c_str(), sInFileName.c_str() );
    
    // 2. Versuch
    MoveFile( (LPCWSTR)sOutFileName.c_str(), (LPCWSTR)sInFileName.c_str() );
    die entsprechenden Header sind natürlich eingebunden und führe das Script sogar als Administrator aus!
    Eine der Varianten müsste doch gehen, oder irre ich mich?
    Danke!


    Ach so, sorry: Es kommen keine Fehler, weder beim Kompilieren, noch beim Ausführen! Es passiert nur halt nichts!
    PHP rocks!
    Eine Initiative der PHP Community

  • #2
    Wenn du wissen willst ob das funktioniert hat solltest du vielleicht auch den return Wert der Methoden und eventuell GetLastError prüfen.

    Comment


    • #3
      Welches Framework?
      Christian

      Comment


      • #4
        Naja, rename gibt -1 zurück und MoveFile false, ich weiß halt nur nicht warum?!

        Oh, sorry Christian zu spät gesehen.
        Ich bin gerade im Visual Studio 2010
        PHP rocks!
        Eine Initiative der PHP Community

        Comment


        • #5
          Datei/Pfad falsch geschrieben
          Rechte fehlen
          Quelle/Ziel vertauscht
          Christian

          Comment


          • #6
            GetLastError??

            Comment


            • #7
              Pfade sind korrekt, denn wenn ich die Datei öffnen will, macht er das!
              Die Rechte sind vorhanden, das habe ich so getestet:
              Code:
              if ( GetLastError == ERROR_ACCESS_DENIED )
                  ...
              PHP rocks!
              Eine Initiative der PHP Community

              Comment


              • #8
                Und wenn ein anderer Fehler als

                ERROR_ACCESS_DENIED

                vorliegt?
                Das auslesen des Fehlers und ggf. die Ausgabe erscheint sinnvoller
                Christian

                Comment


                • #9
                  Um ehrlich zu sein, verzweifle ich gerade an FormatMessage, um mir den fehler anzeigen zu lassen.
                  Habe schon drei Varianten im netz gefunden (auch MSDN), aber irgendwie bekomme ich das grad nicht hin.
                  Ich meld mich, wenns geklappt hat, danke schonmal für eure Unterstützung!
                  PHP rocks!
                  Eine Initiative der PHP Community

                  Comment


                  • #10
                    Ähhh, ein einfacher Breakpoint und das ganze mal debuggen täte es auch.....
                    Christian

                    Comment


                    • #11
                      Ich habe das nun so:
                      Code:
                      string GetSystemErrorMessage(void) {
                      
                      
                          LPSTR lpMsgBuf;
                      
                      
                          FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL);
                      
                      
                          string slBuffer = (string)lpMsgBuf;
                          LocalFree(lpMsgBuf);
                      
                      
                          return slBuffer;
                      
                      
                      }
                      ...aber es kommt als Meldung nur "D" raus!
                      Was mache ich da denn nun wieder falsch?


                      @Christian: auch beim Debugging bekomme ich für den Rückgabewert der Funktion "GetSystemErrorMessage()" nur "D" angezeigt.
                      Zuletzt editiert von Arne Drews; 05.07.2013, 16:25.
                      PHP rocks!
                      Eine Initiative der PHP Community

                      Comment


                      • #12
                        http://msdn.microsoft.com/en-us/library/ms679360%28v=vs.85%29.aspx



                        Es reicht doch, sich diesen Wert anzusehen und dann hier nachzuschauen

                        http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
                        Christian

                        Comment


                        • #13
                          Hoppla, danach hatte ich anfangs auch mal gesucht, aber nichts gefunden, danke!
                          Also es würde dann bedeuten, daß er die Datei nicht findet, aber ich frage mich warum, denn öffnen kann ich sie ja!


                          Nun habe ich die Meldung 32, was da heißt, daß ein anderer Prozess die Datei bereits verwendet.
                          Es handelt sich um eine eigene INI-Datei, die definitiv nicht genutzt wird!
                          Ich habe sogar den WindowsExplorer geschlossen, um sicher zu gehen, daß der nicht dazwischen hängt.

                          Dann muß ich wohl mal auf die Suche gehen, wer die Datei noch in Beschlag hat und wieso überhaupt!

                          Danke für die Hilfe!
                          Zuletzt editiert von Arne Drews; 05.07.2013, 16:48.
                          PHP rocks!
                          Eine Initiative der PHP Community

                          Comment


                          • #14
                            Üblicherweise ist man es eh selbst der noch ein anderes Handle auf die Datei offnen hält und niemand anderes
                            Du hast die Datei in deinem Prozess zuvor wahrscheinlich selbst benutzt und hast nur vergessen den Handle auf die Datei wieder freizugeben.

                            Comment


                            • #15
                              Jep, hatte geprüft, ob die Datei existiert und wie Du schon gesagt hast, das Handle nicht freigegeben.
                              PHP rocks!
                              Eine Initiative der PHP Community

                              Comment

                              Working...
                              X