Warum sollte fopen nicht öffnen Sie eine Datei, die vorhanden ist?

Bin ich auf Windows XP mit Visual Studio 6 (ja ich weiß, es ist alt) Bau/Erweiterung einer C++ - DLL. Ich bin auf ein problem gestoßen mit fopen scheitern, um eine vorhandene Datei zu öffnen, ist es immer NULL zurück.

Ich versucht habe:

  • Prüfen von errno und _doserrno durch setzen beide auf null, und dann überprüfen Sie Sie wieder, bleiben beide null, und damit GetLastError() meldet keine Fehler. Ich weiß fopen ist nicht erforderlich, setzen Sie errno, wenn es auf einen Fehler laut C-standard.
  • Hart codierten Pfad der Datei, die sind nicht relativ.
  • Versucht, auf ein anderes Entwickler-Maschine, die das gleiche Ergebnis.

Die wirklich seltsame Sache ist CreateFile funktioniert und die Datei kann gelesen werden mit ReadFile. Wir glauben, dass diese Werke in einem release-build, jedoch sehen wir einige sehr merkwürdige Verhaltensweisen in anderen Bereichen der Anwendung und wir sind nicht sicher, ob dies ist verwandt.

Den code ist unten, ich sehe nicht, etwas seltsam sieht es ziemlich standard für mich. Die Quell-Datei hat sich nicht geändert, seit knapp einem halben Jahr.

HRESULT CDataHandler::LoadFile( CStdString szFilePath )
{
    //Code
    FILE* pFile;
    if ( NULL == ( pFile = fopen( szFilePath.c_str(), "rb") ) )
    {
        return S_FALSE;
    }
    //More code
}
Visual C++ 6 ist nicht wirklich C++. Sicherlich tagging-C-und C++ ist unsinnig. Entscheiden Sie sich für eine Sprache, die beide in Ihren tags und in Ihrem code.
Oh, und wie für die Frage, prüfen Sie, ob Sie über die Berechtigung zum Zugriff auf die Datei. Es muss nicht nur vorhanden sein: dein Programm muss in der Lage sein, darauf zuzugreifen.
Ja, wir bekommen es, VC++ 6.0 ist nicht Standard-konform. Aber es ist verwirrend, den Menschen zu sagen, es ist nicht C++, wenn es sehr klar zu sein behauptet. Es ist sicherlich nicht C, also was ist die alternative? Ich Stimme völlig, dass tagging-C-und C++ ist unsinnig.
Es ist nicht C++. Es ist nicht kompatibel " (wie Sie sagen) zu viele Möglichkeiten, richtig oder verantwortungsvoll bezeichnet als C++. Es ist eine C++-ähnliche Sprache. Ich Schätze, dass das mag dramatisch, aber es wird ein großer Unterschied, wenn man jemandem zu helfen, der code, der wurde beworben als C++, aber ist wirklich nicht unterliegen den gleichen Gesetzen.
Diese arbeiteten Punkt über C++ Einhaltung von VC6 ist völlig irrelevant für die Frage, die tatsächlich über einen Aufruf der C-standard-Bibliothek, auch wenn Sie aus C++ (oder was auch immer Tomalak meint, wir sollten rufen Sie die Sprache, die der VC6 C++ - compiler kompiliert)

InformationsquelleAutor void | 2011-01-14

Schreibe einen Kommentar