fopen fehl geheimnisvoll unter Windows
Vielleicht habe ich einfach ein anderes schwarz, aber diese eine Zeile gibt mir eine Menge Probleme:
FILE *fp = fopen("data/world.data", "rb");
Diese funktioniert unter Linux beim kompilieren mit GCC. Aber wenn ich es kompilieren mit Visual Studio, stürzt es ab. fp ist immer NULL
. Sowohl die BIN und die EXE sind in der exakt gleichen Verzeichnis. Nun, um die Sache noch verrückter, wenn ich die EXE mit Wine unter Linux... es... funktioniert...
Habe ich absolut keine Gott verdammte Ahnung, was hier Los ist. Vielleicht ist es eine wahnsinnig dumme Fehler auf meiner Seite, aber ich kann nicht dieser Sache unter Windows laufen :/
Auch, ich habe ein anderes Programm, das funktioniert wunderbar, da die Daten-Dateien sind ebenfalls enthalten in einem untergeordneten Verzeichnis mit dem Namen data.
BEARBEITEN:
Deutlich zu machen, die weder /
NOCH `\ * funktionieren.
EDIT 2:
OK, ich habe es aufgegeben, auf diesem, vielleicht hat ja jemand Spaß daran, es herauszufinden, hier die ZIP mit der EXE, Debug-Daten für VS etc.:
https://dl.dropbox.com/u/2332843/Leaf.zip
EDIT 3:
Kompiliert es mit CodeBlocks und MinGW, funktioniert wie ein Charme. Denke, es hat etwas zu tun mit MSVC oder die Projekt-Einstellungen in VS.
Ich hätte es gepostet als Antwort... -_-
Ethier: Lesen Sie msdn.microsoft.com/en-us/library/77859s1t(v=VS.71).aspx
Durch eine chance, haben Sie nicht vergessen zu setzen "Working Directory" - Projekt-Konfiguration-Eigenschaften? Visual studio erstellt *.EXE im debug/release Ordner, und läuft (wenn Sie die app starten von visual studio) sind Ihnen aus gibt es standardmäßig. I. e. wenn Ihre "Daten" anderswo ist, die exe wird nicht in der Lage, ihn zu suchen. Sie können festlegen, "Working Directory" auf so etwas wie $(ProjectDir) $(SolutionDir), die praktisch sein.
was auch immer Sie in Ihrem code:
fopen("data/world.data");
funktioniert einwandfrei und ist sehr wahrscheinlich nicht der Grund für den crash, imho.InformationsquelleAutor Ivo Wetzel | 2010-07-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie
data
ist nicht ein Unterverzeichnis in Ihrem aktuellen - Verzeichnis, wenn Sie das Programm ausführen. Standardmäßig (für x86-targets) VS erstellen und ausführen Ihr Programm entweder aus einem DEBUG-oder RELEASE-Unterverzeichnis des Basis-Verzeichnis haben Sie für das Projekt erstellt. Sie können ändern Sie das Verzeichnis, das "aktuelle", wenn es läuft zwar (z.B. project | properties | configuration properties | debugging für VS 2008).Edit: Während Windows erfordert, dass Sie einen umgekehrten Schrägstrich als Verzeichnistrenner in der Befehlszeile ein Schrägstrich funktioniert feine in code -- dies ist nicht die Quelle Ihres Problems.
haben Sie versucht, mit einem absoluten Pfad zum data-Verzeichnis, um sicherzustellen, dass es gefunden, unabhängig von der ausführbaren Lage?
Ich habe versucht, fast alles, was von jetzt bewegte ich mich, um den code, der die Funktion aufruft, die enthält die fopen-Aufruf, gezupft andere Aufrufe von fopen etc. Es ist nur der Aufruf
fopen("data/world.data", "rb");
das nicht, ich habe andere, die erfolgreich sind. Glaube, dass ich gerade versuche zu kompilieren mit Code::Blocks, Visual Studio ist so F***ING LANGSAM auf meinem netbook sowieso. Und ja, ich habe es versucht auf einem anderen Windows-Rechner bereits.InformationsquelleAutor Jerry Coffin
In windows müssen Sie die folgenden schreiben:
Dies ist so, weil der backslash ist ein Sonderzeichen (also ein backslash in einen string geschrieben mit \ und Anführungszeichen symbol \" und so mit anderen Sonderzeichen).
InformationsquelleAutor Random Guy
Seit dieses Problem tritt nur auf windows. Ich bezweifle, ob die Datei wirklich mit dem Namen "Welt.Daten". Wie Sie wissen, ist die Standardeinstellung für windows blendet die Dateiendung. Ist sein richtiger name-Welt.Daten.xxx?
InformationsquelleAutor evol128
Fügen Sie eine Zeile, GetCurrentDirectory(), um zu sehen, wenn Sie aus dem Verzeichnis, das Sie erwartet.
Wenn ich entwickle in C#/C++ unter visual studio, die ich normalerweise zum laufen zu bekommen, es aus dem debug-Ordner. Ich glaube nicht, dass es wichtig ist, wenn Schrägstriche anstelle von umgekehrten Schrägstrich in .net.
InformationsquelleAutor Blessed Geek
Habe ich zufällig das gleiche problem haben, und plötzlich habe ich es herausgefunden.
Werden sollte, dass Ihr windows-Fehler.
Sagen wir
FILE *fp = fopen("data/world.data", "rb");
im windows, wenn Sie ausblenden Erweiterungen, dann können Sie die Datei data/world.Daten, doch eigentlich ist es vielleicht /data/world.dat.txt oder etwas.So überprüfen Sie bitte die Erweiterungen.
Hoffe, es hilft!
Angesichts der sonstigen Hinweise, die auf Fragen und Kommentare, das ist nicht das problem dieser Zeit. Sie sind richtig, aber, dass MS hidden-Erweiterungen bewirkt, dass Trauer und es lohnt sich zu überprüfen.
InformationsquelleAutor user1672690
Lief ich in diese heute, und es geschah, weil ich "br" anstelle von "rb" auf das argument mode.
Den zugrunde liegenden fopen ist eine Ausnahme von einer Art, die nur registriert, wie ein Absturz. Es ist nicht stört return die standard-Antwort NULL oder stellen Sie die zugehörigen Fehlerwerte.
InformationsquelleAutor davenpcj
Ich bin mir nicht sicher, aber kann es sein, weil Sie mit slash statt (geflohen) backslash im Pfad?
/
, und ich habe es schon versucht mit\\
kein Unterschied nur ein weiterer crash :/Sie können verwenden Sie Schrägstriche anstelle von umgekehrten Schrägstrichen auf win2000 und winxp kein problem. Sie kann Probleme verursachen, auf win98 und unten. Nicht sicher, ob es dokumentiert ist, verfügen oder, wenn es offiziell unterstützt auf vista oder höher.
Versionen von Windows akzeptiert haben, (vorwärts -) Schrägstriche nur fein-und MS-DOS zurück zu den ersten Versionen, die unterstützt Unterverzeichnisse (2.x) Tat, wie gut. Ein (sehr) wenige frühe Versionen von MS-DOS, sogar erlaubt Sie, um es zu akzeptieren, ' / ' und '-' anstelle von '\' und '/'. (also, folgt UNIX-Konventionen) in der Befehlszeile.
Sarg: ich sagte "könnte", was bedeutet, ich bin mir nicht sicher. Und ich meinte nur, weil die Menschen einmal berichtet, dass das Programm (wurde mit Hilfe der vorwärts-Schrägstriche) funktioniert einwandfrei auf win98. Da konnte ich nicht debug-Programm auf der Maschine, ich weiß nicht, ob Pfad-Separatoren wurden das problem verursacht. Auch, wenn Sie sicher sind, dass es unterstützt wird Verhalten, wäre es schön, wenn Sie gab einen link von der msdn-Website, in denen dieses Verhalten ist offiziell dokumentiert. Dies würde einfach das Ende aller Argumente.
Ich habe nicht versucht zu sagen, Sie waren falsch-nur, Sie wurden sogar mehr Recht haben als die, die Sie erkannt haben. @akira hat schon einen MSDN link in einem Kommentar auf die ursprüngliche Frage. Ich bezweifle, dass zu diesem späten Zeitpunkt, wir sind gehen, um herauszufinden, ein viel über MSDN, über etwas so alt wie Windows 98, 95, 2.11, MS-DOS 3.3, etc.
InformationsquelleAutor nico