Allvarligt fel C1083

Det går inte att öppna filtypsfilen : "file": message

Anmärkningar

Kompilatorn genererar ett C1083-fel när den inte kan hitta en fil. Det finns många möjliga orsaker till det här felet. En felaktig inkluderingssökväg, saknade huvudfiler eller felaktigt namngivna huvudfiler är de vanligaste orsakerna, men andra filtyper och problem kan också orsaka C1083. Här är några av de vanligaste orsakerna till att kompilatorn genererar det här felet.

Det angivna filnamnet är fel

Namnet på en fil kan vara feltypat. Ett exempel:

#include <algorithm.h>

kanske inte hittar den fil som du tänker använda. De flesta C++ Standard Library-headerfiler har inget .h-filnamnstillägg. Det här #include direktivet kommer inte hitta <algorithm> rubriken. Åtgärda problemet genom att kontrollera att rätt filnamn har angetts enligt följande:

#include <algorithm>

Vissa C Runtime-bibliotekets headerfiler finns i en underkatalog till standardkatalogen. Om du till exempel vill inkludera sys/types.hmåste du inkludera sys underkatalognamnet i #include direktivet:

#include <sys/types.h>

Filen ingår inte i sökvägen inkludera

Kompilatorn kan inte hitta filen med hjälp av sökreglerna för #include eller #import -direktivet. När ett rubrikfilnamn till exempel omges av citattecken,

#include "myincludefile.h"

Detta instruerar kompilatorn att leta efter filen i samma katalog som innehåller källfilen först och sedan titta på andra platser som anges av byggmiljön. Om citattecknen innehåller en absolut sökväg letar kompilatorn bara efter filen på den platsen. Om citattecknen innehåller en relativ sökväg letar kompilatorn efter filen i katalogen i förhållande till källkatalogen.

Om namnet omges av vinkelparenteser,

#include <stdio.h>

kompilatorn följer en sökväg som definieras av byggmiljön, /I kompilatoralternativet, kompilatoralternativet /X och variabeln INCLUDE-miljö . För mer information, inklusive specifika detaljer om sökningsordningen som används för att hitta en fil, se #include-direktiv (C/C++) och #import-direktiv.

Om dina inkluderingsfiler finns i en annan katalog i förhållande till källkatalogen och du använder en relativ sökväg i dina inkluderingsdirektiv måste du använda dubbla citattecken i stället för vinkelparenteser. Om rubrikfilen myheader.h till exempel finns i en underkatalog till dina projektkällor med namnet headers kan det här exemplet inte hitta filen och orsakar C1083:

#include <headers\myheader.h>

men det här exemplet fungerar:

#include "headers\myheader.h"

Relativa sökvägar kan också användas med kataloger på include-sökvägen. Om du lägger till en katalog i variabeln INCLUDE-miljö eller till sökvägen Inkludera kataloger i Visual Studio ska du inte lägga till en del av sökvägen till inkluderingsdirektiven. Om din rubrik till exempel finns på \path\example\headers\myheader.h och du lägger till \path\example\headers\ i sökvägen för Inkluderade kataloger i Visual Studio, men din #include-direktiv refererar till filen som

#include <headers\myheader.h>

sedan hittas inte filen. Använd rätt sökväg i förhållande till den katalog som anges i den inkluderade sökvägen. I det här exemplet kan du ändra sökvägen include till \path\example\eller ta bort sökvägssegmentet headers\#include från direktivet.

Biblioteksproblem från tredje part och vcpkg

Om du ser det här felet när du försöker konfigurera ett bibliotek från tredje part som en del av bygget bör du överväga att använda vcpkg, en C++-pakethanterare, för att installera och skapa biblioteket. vcpkg stöder en stor och växande lista över bibliotek från tredje part och anger alla konfigurationsegenskaper och beroenden som krävs för lyckade versioner som en del av projektet.

Filen finns i projektet, men inte i sökvägen för inkludering.

Även om huvudfiler visas i Solution Explorer som en del av ett projekt, hittas filerna endast av kompilatorn när de refereras till av ett #include eller-direktiv #import i en källfil och finns i en sökväg för inkludering. Olika typer av versioner kan använda olika sökvägar. Kompilatoralternativet /X kan användas för att undanta kataloger från sökvägen include. På så sätt kan olika versioner använda olika inkluderingsfiler som har samma namn, men som finns i olika kataloger. Det här är ett alternativ till villkorsstyrd kompilering med hjälp av kommandon för förprocessorer. För mer information om kompileringsalternativet /X se /X (Ignorera standard-sökvägar för inkludering).

Åtgärda problemet genom att korrigera sökvägen som kompilatorn använder för att söka efter den inkluderade eller importerade filen. I ett nytt projekt används som standard inkluderade sökvägar. Du kan behöva ändra sökvägen för inkludering för att lägga till en katalog för ditt projekt. Om du kompilerar på kommandoraden lägger du till sökvägen till miljövariabeln INCLUDE eller kompilatoralternativet /I för att ange sökvägen till filen.

För att ange sökvägen till inkluderingskatalogen i Visual Studio, öppnar du dialogrutan Egenskapssidor för projektet. Välj VC++ Kataloger under Konfigurationsegenskaper i det vänstra fönstret och redigera sedan egenskapen Inkludera kataloger . Mer information om kataloger per användare och per projekt som genomsöks av kompilatorn i Visual Studio finns i egenskapssidan för VC++-kataloger. Mer information om kompileringsalternativet /I/I finns i (Ytterligare inkludera kataloger).

Kommandoraden INCLUDE- eller LIB-miljön har inte angetts

När kompilatorn anropas på kommandoraden används miljövariabler ofta för att ange sökvägar. Om sökvägen som beskrivs av miljövariabeln INCLUDE eller LIB inte har angetts korrekt kan ett C1083-fel genereras. Vi rekommenderar starkt att du använder en genväg till kommandotolken för utvecklare för att ange den grundläggande miljön för kommandoradsversioner. Mer information finns i Skapa C/C++ på kommandoraden. Mer information om hur du använder miljövariabler finns i Så här använder du miljövariabler i en version.

Filen kan vara låst eller används

Om du använder ett annat program för att redigera eller komma åt filen kan filen vara låst. Försök att stänga filen i det andra programmet. Ibland kan det andra programmet vara Själva Visual Studio, om du använder parallella kompileringsalternativ. Om felet försvinner när du inaktiverar alternativet för parallellkompilering, så är det här orsaken till problemet. Andra parallella byggsystem kan också ha det här problemet. Var noga med att ange fil- och projektberoenden så att byggordningen är korrekt. I vissa fall bör du överväga att skapa ett mellanliggande projekt för att tvinga fram en beroendeordning för en gemensam fil som kan skapas av flera projekt. Ibland låser antivirusprogram tillfälligt nyligen ändrade filer för genomsökning. Om möjligt bör du överväga att exkludera dina projektversionskataloger från antivirusskannern.

Fel version av ett filnamn ingår

Ett C1083-fel kan också indikera att fel version av en fil ingår. En version kan till exempel innehålla fel version av en fil som har ett #include direktiv för en huvudfil som inte är avsedd för den versionen. Vissa filer kan till exempel bara gälla för x86-versioner eller felsökningsversioner. När huvudfilen inte hittas genererar kompilatorn ett C1083-fel. Korrigeringen för det här problemet är att använda rätt fil, inte att lägga till huvudfilen eller katalogen i bygget.

De förkompilerade rubrikerna är ännu inte förkompilerade

När ett projekt har konfigurerats för att använda förkompilerade rubriker måste relevanta .pch filer skapas så att filer som använder rubrikinnehållet kan kompileras. Till exempel skapas filen pch.cpp (stdafx.cpp i Visual Studio 2017 och tidigare) automatiskt i projektkatalogen för nya projekt. Kompilera filen först för att skapa de förkompilerade huvudfilerna. I den typiska byggprocessdesignen görs detta automatiskt. Mer information finns i Skapa förkompilerade huvudfiler.

Andra orsaker

  • Du har installerat ett SDK- eller tredjepartsbibliotek, men inte öppnat någon ny kommandotolk för utvecklare. Om SDK:n eller biblioteket lägger till filer i INCLUDE-sökvägen kan du behöva öppna ett nytt kommandotolkfönster för utvecklare för att hämta dessa ändringar i miljövariablerna.

  • Filen använder hanterad kod, men kompilatoralternativet /clr har inte angetts. Mer information finns i /clr (Common Language Runtime Compilation).

  • Filen kompileras med hjälp av en annan /analyze alternativinställning för kompilatorn än vad som används för att förkompilera rubrikerna. När rubrikerna för ett projekt är förkompilerade bör alla använda samma /analyze inställningar. Mer information finns i /analyze (Kodanalys).

  • Filen eller katalogen skapades av Windows Subsystem för Linux, skiftlägeskänslighet på katalognivå är aktiverad och det angivna skiftläget för en sökväg eller fil matchar inte skiftläget i sökvägen eller filen på disken.

  • Filen, katalogen eller disken är skrivskyddad.

  • Visual Studio eller kommandoradsverktygen har inte tillräcklig behörighet för att läsa filen eller katalogen. Detta kan till exempel inträffa när projektfilerna har ett annat ägarskap än processen som kör Visual Studio eller kommandoradsverktygen. Ibland kan det här problemet åtgärdas genom att köra Visual Studio eller kommandotolken för utvecklare som administratör.

  • Det finns inte tillräckligt med filhandtag. Stäng vissa program och kompilera sedan om. Detta tillstånd är ovanligt under typiska omständigheter. Det kan dock inträffa när stora projekt byggs på en dator som har begränsat fysiskt minne.

Exempel

I följande exempel genereras ett C1083-fel när huvudfilen "test.h" inte finns i källkatalogen eller på sökvägen inkludera.

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

Information om hur du skapar C/C++-projekt i IDE eller på kommandoraden och information om hur du anger miljövariabler finns i Projekt och byggsystem.

Se även