Schwerwiegender Fehler C1083

Dateitypdatei kann nicht geöffnet werden: 'Datei': Nachricht

Der Compiler generiert einen C1083-Fehler, wenn er eine Datei nicht finden kann. Für diesen Fehler gibt es viele mögliche Ursachen. Ein falscher Suchpfad oder fehlende oder falsch benannte Headerdateien sind die häufigsten Ursachen, aber andere Dateitypen und Probleme können auch C1083 verursachen. Nachfolgend sind einige der häufigsten Gründe aufgeführt, warum der Compiler diesen Fehler generiert.

Der angegebene Dateiname ist falsch

Der Name einer Datei kann falsch eingegeben werden. Ein auf ein Objekt angewendeter

#include <algorithm.h>

Die von Ihnen gewünschte Datei wird möglicherweise nicht gefunden. Die meisten C++-Standardbibliotheksheaderdateien verfügen nicht über eine .h Dateinamenerweiterung. Diese #include Direktive findet den <algorithm> Header nicht. Um dieses Problem zu beheben, überprüfen Sie, ob der richtige Dateiname wie folgt eingegeben wird:

#include <algorithm>

Bestimmte Header der C-Laufzeitbibliothek befinden sich in einem Unterverzeichnis des Standardincludeverzeichnisses. Um beispielsweise einzuschließen, müssen Sie den Namen des sys Unterverzeichnisses in die #include Direktive einschließensys/types.h:

#include <sys/types.h>

Die Datei ist nicht im Suchpfad enthalten.

Der Compiler kann die Datei nicht mithilfe der Suchregeln für die #include Oder #import Direktive finden. Wenn beispielsweise ein Headerdateiname durch Anführungszeichen eingeschlossen wird,

#include "myincludefile.h"

dies weist den Compiler an, zuerst nach der Datei im selben Verzeichnis zu suchen, das die Quelldatei enthält, und dann an anderen Speicherorten suchen, die von der Buildumgebung angegeben sind. Wenn die Anführungszeichen einen absoluten Pfad enthalten, sucht der Compiler nur nach der Datei an diesem Speicherort. Wenn die Anführungszeichen einen relativen Pfad enthalten, sucht der Compiler nach der Datei im Verzeichnis relativ zum Quellverzeichnis.

Wenn der Name in eckige Klammern eingeschlossen ist,

#include <stdio.h>

der Compiler folgt einem Suchpfad, der durch die Buildumgebung, die /I Compileroption, die /X Compileroption und die INCLUDE-Umgebungsvariable definiert wird. Weitere Informationen, einschließlich spezifischer Details zur Suchreihenfolge, die zum Suchen einer Datei verwendet wird, finden Sie unter #include-Direktive (C/C++) und #import-Direktive.

Wenn sich Die eingeschlossenen Dateien in einem anderen Verzeichnis relativ zu Ihrem Quellverzeichnis befinden und Sie in Ihren Include-Direktiven einen relativen Pfad verwenden, müssen Sie doppelte Anführungszeichen anstelle von winkeln Klammern verwenden. Wenn sich ihre Headerdatei myheader.h beispielsweise in einem Unterverzeichnis ihrer Projektquellen mit dem Namen "Header" befindet, wird in diesem Beispiel die Datei nicht gefunden und verursacht C1083:

#include <headers\myheader.h>

dieses Beispiel funktioniert jedoch:

#include "headers\myheader.h"

Relative Pfade können auch mit Verzeichnissen im Include-Suchpfad verwendet werden. Wenn Sie der INCLUDE-Umgebungsvariable oder dem Pfad "Include-Verzeichnisse" in Visual Studio ein Verzeichnis hinzufügen, fügen Sie keinen Teil des Pfads zu den include-Direktiven hinzu. Wenn sich ihre Kopfzeile beispielsweise befindet \path\example\headers\myheader.hund Sie ihrem Include-Verzeichnisse-Pfad in Visual Studio hinzufügen\path\example\headers\, ihre Direktive bezieht sich jedoch #include auf die Datei als

#include <headers\myheader.h>

dann wird die Datei nicht gefunden. Verwenden Sie den richtigen Pfad relativ zum im Suchpfad angegebenen Verzeichnis. In diesem Beispiel können Sie den Suchpfad \path\example\einschließen in oder das headers\ Pfadsegment aus der #include Direktive entfernen.

Probleme mit Drittanbieterbibliotheken und vcpkg

Wenn dieser Fehler angezeigt wird, wenn Sie versuchen, eine Drittanbieterbibliothek als Teil Ihres Builds zu konfigurieren, erwägen Sie die Verwendung von vcpkg, einem C++-Paket-Manager, zum Installieren und Erstellen der Bibliothek. vcpkg unterstützt eine große und wachsende Liste von Drittanbieterbibliotheken und legt alle Konfigurationseigenschaften und Abhängigkeiten fest, die für erfolgreiche Builds im Rahmen Ihres Projekts erforderlich sind.

Die Datei befindet sich in Ihrem Projekt, aber nicht im Suchpfad einschließen

Selbst wenn Kopfzeilendateien als Teil eines Projekts in Projektmappen-Explorer aufgeführt werden, werden die Dateien nur vom Compiler gefunden, wenn sie von einer oder #import einer Direktive in einer #include Quelldatei referenziert werden und sich in einem eingeschlossenen Suchpfad befinden. Für unterschiedliche Buildtypen können unterschiedliche Suchpfade verwendet werden. Die /X Compileroption kann verwendet werden, um Verzeichnisse aus dem Include-Suchpfad auszuschließen. Dadurch können für verschiedene Builds unterschiedliche Includedateien verwendet werden, die denselben Namen besitzen, sich aber in unterschiedlichen Verzeichnissen befinden. Dies ist eine Alternative zur bedingten Kompilierung mithilfe von Präprozessorbefehlen. Weitere Informationen zur /X Compileroption finden Sie unter /X (Standardeinschließpfade ignorieren).

Korrigieren Sie zur Behebung dieses Problems den Pfad, den der Compiler für die Suche nach der eingeschlossenen oder importierten Datei verwendet. Ein neues Projekt verwendet standardmäßig Suchpfade. Möglicherweise müssen Sie den Include-Suchpfad ändern, um ein Verzeichnis für Ihr Projekt hinzuzufügen. Wenn Sie in der Befehlszeile kompilieren, fügen Sie den Pfad zur INCLUDE-Umgebungsvariable oder der /I Compileroption hinzu, um den Pfad zur Datei anzugeben.

Öffnen Sie das Dialogfeld "Eigenschaftenseiten" des Projekts, um den Verzeichnispfad in Visual Studio festzulegen. Wählen Sie "VC++-Verzeichnisse" unter "Konfigurationseigenschaften " im linken Bereich aus, und bearbeiten Sie dann die Include-Verzeichnisse-Eigenschaft . Weitere Informationen zu den Pro-Benutzer- und Projektverzeichnissen, die vom Compiler in Visual Studio durchsucht werden, finden Sie auf der VC++-Directories-Eigenschaftsseite. Weitere Informationen zur /I Compileroption finden Sie unter /I (Zusätzliche Includeverzeichnisse).

Die Befehlszeile INCLUDE- oder LIB-Umgebung ist nicht festgelegt.

Beim Aufrufen des Compilers über die Befehlszeile werden Suchpfade oft mithilfe von Umgebungsvariablen angegeben. Wenn der durch die INCLUDE - oder LIB-Umgebungsvariable beschriebene Suchpfad nicht ordnungsgemäß festgelegt ist, kann ein C1083-Fehler generiert werden. Es wird dringend empfohlen, eine Eingabeaufforderungsverknüpfung für Entwickler zu verwenden, um die grundlegende Umgebung für Befehlszeilenbuilds festzulegen. Weitere Informationen finden Sie unter Build C/C++ in der Befehlszeile. Weitere Informationen zur Verwendung von Umgebungsvariablen finden Sie unter How to: Use Environment Variables in a Build.

Die Datei ist möglicherweise gesperrt oder wird verwendet.

Wenn Sie ein anderes Programm zum Bearbeiten oder Zugreifen auf die Datei verwenden, ist die Datei möglicherweise gesperrt. Schließen Sie die Datei im anderen Programm. Manchmal kann das andere Programm Visual Studio selbst sein, wenn Sie parallele Kompilierungsoptionen verwenden. Wenn die Parallelbuildoption deaktiviert wird, wird der Fehler nicht angezeigt, dann ist dies das Problem. Auch andere parallele Buildsysteme können dieses Problem haben. Achten Sie darauf, Datei- und Projektabhängigkeiten festzulegen, damit die Buildreihenfolge korrekt ist. In einigen Fällen sollten Sie ein Zwischenprojekt erstellen, um die Erstellungsabhängigkeitsreihenfolge für eine gemeinsame Datei zu erzwingen, die von mehreren Projekten erstellt werden kann. Manchmal sperren Antivirenprogramme vorübergehend zuletzt geänderte Dateien zum Scannen. Wenn möglich, sollten Sie die Projektbuildverzeichnisse vom Antivirenscanner ausschließen.

Die falsche Version eines Dateinamens wird verwendet

Ein Fehler C1083 kann auch darauf hinweisen, dass die falsche Version einer Datei verwendet wird. Beispielsweise könnte ein Build die falsche Version einer Datei enthalten, die über eine #include Direktive für eine Headerdatei verfügt, die nicht für diesen Build vorgesehen ist. Beispielsweise können bestimmte Dateien nur auf x86-Builds oder auf Debugbuilds angewendet werden. Wenn die Headerdatei nicht gefunden wird, generiert der Compiler einen C1083-Fehler. Dieses Problem kann behoben werden, indem die richtige Datei verwendet wird. Durch Hinzufügen der Headerdatei oder des Verzeichnisses zum Build lässt sich das Problem nicht beheben.

Die vorkompilierten Header sind noch nicht vorkompiliert.

Wenn ein Projekt für die Verwendung vorkompilierter Header konfiguriert ist, müssen die relevanten .pch Dateien erstellt werden, damit Dateien, die den Headerinhalt verwenden, kompiliert werden können. Beispielsweise wird die pch.cpp Datei (stdafx.cpp in Visual Studio 2017 und früher) automatisch im Projektverzeichnis für neue Projekte erstellt. Kompilieren Sie diese Datei zuerst, um die vorkompilierten Headerdateien zu erstellen. Im typischen Buildprozessentwurf erfolgt dies automatisch. Weitere Informationen finden Sie unter Erstellen von vorkompilierten Headerdateien.

Weitere Ursachen

  • Sie haben ein SDK oder eine Drittanbieterbibliothek installiert, aber keine neue Entwickler-Eingabeaufforderung geöffnet. Wenn das SDK oder die Bibliothek Dateien zum INCLUDE-Pfad hinzufügt, müssen Sie möglicherweise ein neues Entwickler-Eingabeaufforderungsfenster öffnen, um diese Umgebungsvariablenänderungen zu übernehmen.

  • Die Datei verwendet verwalteten Code, die Compileroption /clr ist jedoch nicht angegeben. Weitere Informationen finden Sie unter /clr (Common Language Runtime Compilation).

  • Die Datei wird mithilfe einer anderen /analyze Compileroptionseinstellung kompiliert als zum Vorkompilieren der Header. Wenn die Kopfzeilen für ein Projekt vorkompiliert sind, sollten alle dieselben /analyze Einstellungen verwenden. Weitere Informationen finden Sie unter /analyze (Codeanalyse).

  • Die Datei oder das Verzeichnis wurde von der Windows-Subsystem für Linux erstellt, die Vertraulichkeit der Groß-/Kleinschreibung pro Verzeichnis ist aktiviert, und der angegebene Fall eines Pfads oder einer Datei stimmt nicht mit dem Fall des Pfads oder der Datei auf dem Datenträger überein.

  • Die Datei, das Verzeichnis oder der Datenträger ist schreibgeschützt.

  • Visual Studio oder die Befehlszeilentools verfügen nicht über ausreichende Berechtigungen zum Lesen der Datei oder des Verzeichnisses. Dies kann z. B. passieren, wenn die Projektdateien einen anderen Besitz haben als der Prozess, bei dem Visual Studio oder die Befehlszeilentools ausgeführt werden. Manchmal kann dieses Problem behoben werden, indem Visual Studio oder die Entwickler-Eingabeaufforderung als Administrator ausgeführt wird.

  • Es gibt nicht genügend Dateihandles. Schließen Sie einige Anwendungen, und kompilieren Sie dann erneut. Diese Bedingung ist unter normalen Umständen ungewöhnlich. Sie kann jedoch auftreten, wenn große Projekte auf einem Computer erstellt werden, dessen physischer Speicher beschränkt ist.

Beispiel

Im folgenden Beispiel wird ein C1083-Fehler generiert, wenn die Headerdatei "test.h" nicht im Quellverzeichnis oder im Include-Suchpfad vorhanden ist.

// C1083.cpp
// compile with: /c
#include "test.h"   // C1083 test.h doesn't exist
#include "stdio.h"  // OK

Informationen zum Erstellen von C/C++-Projekten in der IDE oder in der Befehlszeile sowie Informationen zum Festlegen von Umgebungsvariablen finden Sie unter Projekte und Buildsysteme.

Siehe auch