Ошибка при чтении файла инструментария

Обновлено: 02.07.2024

Компоновщик не может произвести запись в filename . Файл используется или его дескриптор заблокирован другим процессом либо у вас нет разрешения на запись для этого файла, каталога или сетевой папки, в которой находится файл. эта ошибка часто вызывается временным условием, например блокировкой, удерживаемой антивирусной программой, процессом индексирования поиска файлов или задержкой освобождения блокировки, удерживаемой системой сборки Visual Studio.

Чтобы устранить эту проблему, убедитесь, что дескриптор файла filename не заблокирован и у вас есть разрешение на запись в данный файл. Если это исполняемый файл, убедитесь, что он не запущен на исполнение.

вы можете использовать служебные программы Windows SysInternals или обозреватель процессов , чтобы определить, на каком процессе выполняется блокировка файла filename . С помощью программы Process Explorer можно также снимать блокировку дескрипторов открытых файлов. Сведения об использовании этих программ см. в поставляемых с ними файлах справки.

Если файл заблокирован антивирусной программой, для устранения проблемы исключите выходные каталоги сборки из автоматической проверки антивирусной программой. Программы проверки на вирусы часто запускаются при создании в системе новых файлов и блокируют эти файлы на время проверки. Сведения о порядке отключения проверки определенных каталогов см. в документации антивирусной программы.

Если файл заблокирован службой индексирования поиска, для устранения этой проблемы отключите автоматическое индексирование выходных каталогов сборки. Дополнительные сведения см. в документации службы индексирования. чтобы изменить службу индексирования поиска Windows, используйте параметры индексирования на панели управления Windows. дополнительные сведения см. в разделе индексирование поиска в Windows 10: часто задаваемые вопросы.

Если процесс сборки не может перезаписать исполняемый файл, возможно, он заблокирован программой Проводник. Если служба взаимодействия с приложением была отключена, проводник может удерживать блокировку исполняемого файла в течение длительного времени. Чтобы устранить эту проблему, запустите Services. msc и откройте диалоговое окно " свойства " для службы " взаимодействие приложений ". Измените Тип запуска с " отключено " на " вручную".

CityCat4

Не надо использовать эту [beep] конструкцию while(!feof())
От нее только проблемы. Используйте fscanf() в цикле, пока он не вернет EOF.

Да, я знаю, что в примерах так - я сам когда-то писал по таким же примерам и потом долго матерился, не понимая, почему не работает.

Насколько мне известно, fscanf не возвращает EOF. Возвращает 0.

CityCat4

On success, these functions return the number of input items successfully matched and assigned; this can be fewer than provided for, or even zero, in the event of an early matching failure.

The value EOF is returned if the end of input is reached before either the first successful conversion
or a matching failure occurs. EOF is also returned if a read error occurs, in which case the error
indicator for the stream (see ferror(3)) is set, and errno is set to indicate the error.

Можно для гарантии проверять на возврат нуля, конечно же. Мне вот все эти танцы с потоковым чтением видятся осмысленными только для файлов гигантского размера типа сквидовых логов. Файлы осмысленного размера проще читать через read (ну или read-sscanf - для ленивых)

feof возвращает true, когда мы попытались прочитать и не смогли, потому что каретка ударилась в конец файла. А не когда каретка аккуратно припарковалась в конце файла — и уж тем более не когда она отделена от конца пробелами.

Лучше прочитайте про scanf…

On success, the function returns the number of items of the argument list successfully filled. This count can match the expected number of items or be less (even zero) due to a matching failure, a reading error, or the reach of the end-of-file.

BacCM

1. Стоит проверять что возвращает функция чтения fscanf.
Она явно не смогла прочитать число из потока.
У тебя в файле после последней единицы что-то есть типа возврата строки, пробела или чего-то подобного.

2. Уже к чистоте кода держите переменные ближе к месту использования. temp сразу перед fscanf и ещё и чем нибудь инициализировать. Тогда как минимум в подобных случаях будет не последнее значение, а "маркер"

Microsoft Windows [Version 6.2.9200]

(c) Корпорация Майкрософт , 2012. Все права защищены .

Диагностика сервера каталогов

Выполнение начальной настройки:

Выполняется попытка поиска основного сервера.

Основной сервер = DC2

* Определен лес AD.

Сбор начальных данных завершен.

Выполнение обязательных начальных проверок

Сервер проверки : Default-First-Site-Name\DC2

Запуск проверки: Connectivity

. DC2 - пройдена проверка Connectivity

Выполнение основных проверок

Сервер проверки : Default-First-Site-Name\DC2

Запуск проверки: Advertising

. DC2 - пройдена проверка Advertising

Запуск проверки: FrsEvent

. DC2 - пройдена проверка FrsEvent

Запуск проверки: DFSREvent

. DC2 - пройдена проверка DFSREvent

Запуск проверки: SysVolCheck

. DC2 - пройдена проверка SysVolCheck

Запуск проверки: KccEvent

. DC2 - пройдена проверка KccEvent

Запуск проверки: KnowsOfRoleHolders

. DC2 - пройдена проверка KnowsOfRoleHolders

Запуск проверки: MachineAccount

. DC2 - пройдена проверка MachineAccount

Запуск проверки: NCSecDesc

. DC2 - пройдена проверка NCSecDesc

Запуск проверки: NetLogons

. DC2 - пройдена проверка NetLogons

Запуск проверки: ObjectsReplicated

. DC2 - пройдена проверка ObjectsReplicated

Запуск проверки: Replications

. DC2 - пройдена проверка Replications

Запуск проверки: RidManager

. DC2 - пройдена проверка RidManager

Запуск проверки: Services

. DC2 - пройдена проверка Services

Запуск проверки: SystemLog

. DC2 - пройдена проверка SystemLog

Запуск проверки: VerifyReferences

. DC2 - пройдена проверка VerifyReferences

Выполнение проверок разделов на: ForestDnsZones

Запуск проверки: CheckSDRefDom

. ForestDnsZones - пройдена проверка

Запуск проверки: CrossRefValidation

. ForestDnsZones - пройдена проверка

Выполнение проверок разделов на: DomainDnsZones

Запуск проверки: CheckSDRefDom

. DomainDnsZones - пройдена проверка

Запуск проверки: CrossRefValidation

. DomainDnsZones - пройдена проверка

Выполнение проверок разделов на: Schema

Запуск проверки: CheckSDRefDom

. Schema - пройдена проверка CheckSDRefDom

Запуск проверки: CrossRefValidation

. Schema - пройдена проверка

Выполнение проверок разделов на: Configuration

Запуск проверки: CheckSDRefDom

. Configuration - пройдена проверка

Запуск проверки: CrossRefValidation

. Configuration - пройдена проверка

Выполнение проверок разделов на: xxxxxxx

Запуск проверки: CheckSDRefDom

. xxxxxxx - пройдена проверка CheckSDRefDom

Запуск проверки: CrossRefValidation

. xxxxxxx - пройдена проверка

Выполнение проверок предприятия на: xxxxxxx.local

Запуск проверки: LocatorCheck

. xxxxxxx.local - пройдена проверка

Запуск проверки: Intersite

. xxxxxxx.local - пройдена проверка

Microsoft Windows [Version 6.2.9200]

(c) Корпорация Майкрософт, 2012. Все права защищены.

Настройка протокола IP для Windows

Ethernet adapter Ethernet:

DNS -суффикс подключения . . . . . :

Локальный IPv 6-адрес канала . . . : fe 80::64 dd : aab :39 ab :3 ab 6%12

IPv 4-адрес. . . . . . . . . . . . : 192.168.9 1 .5

Маска подсети . . . . . . . . . . : 255.255.255.0

Основной шлюз. . . . . . . . . : 192.168. 1 .254

Состояние среды. . . . . . . . : Среда передачи недоступна.

DNS -суффикс подключения . . . . . :

Туннельный адаптер Подключение по локальной сети* 1:

Состояние среды. . . . . . . . : Среда передачи недоступна.

Microsoft Windows [Version 6.2.9200]

(c) Корпорация Майкрософт, 2012. Все права защищены.

Диагностика сервера каталогов

Выполнение начальной настройки:

Выполняется попытка поиска основного сервера.

Основной сервер = WIN - SRV 1

* Определен лес AD .

Сбор начальных данных завершен.

Выполнение обязательных начальных проверок

Сервер проверки: Default-First-Site-Name\WIN-SRV1

Запуск проверки: Connectivity

. WIN - SRV 1 - пройдена проверка Connectivity

Выполнение основных проверок

Сервер проверки: Default-First-Site-Name\WIN-SRV1

Запуск проверки: Advertising

. WIN-SRV1 - пройдена проверка Advertising

Запуск проверки: FrsEvent

. WIN - SRV 1 - пройдена проверка FrsEvent

Запуск проверки: DFSREvent

. WIN - SRV 1 - пройдена проверка DFSREvent

Запуск проверки: SysVolCheck

. WIN - SRV 1 - пройдена проверка SysVolCheck

Запуск проверки: KccEvent

. WIN - SRV 1 - пройдена проверка KccEvent

Запуск проверки: KnowsOfRoleHolders

. WIN - SRV 1 - пройдена проверка

Запуск проверки: MachineAccount

. WIN - SRV 1 - пройдена проверка MachineAccount

Запуск проверки: NCSecDesc

. WIN - SRV 1 - пройдена проверка NCSecDesc

Запуск проверки: NetLogons

. WIN - SRV 1 - пройдена проверка NetLogons

Запуск проверки: ObjectsReplicated

. WIN - SRV 1 - пройдена проверка

Запуск проверки: Replications

. WIN - SRV 1 - пройдена проверка Replications

Запуск проверки: RidManager

. WIN - SRV 1 - пройдена проверка RidManager

Запуск проверки: Services

. WIN - SRV 1 - пройдена проверка Services

Запуск проверки: SystemLog

Возникла ошибка. Код события ( EventID ): 0 x 00000422

Ошибка при обработке групповой политики. Попытка чтения файла "\\ххххххх .local\SysVol\xxxxxxx.local\Policies\

Возникла ошибка. Код события ( EventID ): 0 x 00000422

Возникла ошибка. Код события ( EventID ): 0 x 00000422

Возникла ошибка. Код события ( EventID ): 0 x 00000422

Возникла ошибка. Код события ( EventID ): 0 x 00000422

Возникла ошибка. Код события ( EventID ): 0 x 00000422

Возникла ошибка. Код события ( EventID ): 0 x 00000422

Возникла ошибка. Код события ( EventID ): 0 x 00000422

Возникла ошибка. Код события ( EventID ): 0 x 00000422

Возникла ошибка. Код события ( EventID ): 0 x 00000422

Возникла ошибка. Код события ( EventID ): 0 x 00000422

Возникла ошибка. Код события ( EventID ): 0 x 00000422

. WIN - SRV 1 - не пройдена проверка SystemLog

Запуск проверки: VerifyReferences

. WIN - SRV 1 - пройдена проверка

Выполнение проверок разделов на: DomainDnsZones

Запуск проверки: CheckSDRefDom

. DomainDnsZones - пройдена проверка

Запуск проверки: CrossRefValidation

. DomainDnsZones - пройдена проверка

Выполнение проверок разделов на: ForestDnsZones

Запуск проверки: CheckSDRefDom

. ForestDnsZones - пройдена проверка

Запуск проверки: CrossRefValidation

. ForestDnsZones - пройдена проверка

Выполнение проверок разделов на: Schema

Запуск проверки: CheckSDRefDom

. Schema - пройдена проверка CheckSDRefDom

Запуск проверки: CrossRefValidation

. Schema - пройдена проверка

Выполнение проверок разделов на: Configuration

Запуск проверки: CheckSDRefDom

. Configuration - пройдена проверка

Запуск проверки: CrossRefValidation

. Configuration - пройдена проверка

Выполнение проверок разделов на: xxxxxxx

Запуск проверки: CheckSDRefDom

. xxxxxxx - пройдена проверка CheckSDRefDom

Запуск проверки: CrossRefValidation

. xxxxxxx - пройдена проверка

Выполнение проверок предприятия на: xxxxxxx . local

Запуск проверки: LocatorCheck

. xxxxxxx . local - пройдена проверка

Запуск проверки: Intersite

. xxxxxxx . local - пройдена проверка

Microsoft Windows [Version 6.2.9200]
(c) Корпорация Майкрософт, 2012. Все права защищены.

Настройка протокола IP для Windows


Ethernet adapter Ethernet:

DNS-суффикс подключения . . . . . :
Локальный IPv6-адрес канала . . . : fe80::440b:5c48:f55:6c45%12
IPv4-адрес. . . . . . . . . . . . : 192.168.1.1
Маска подсети . . . . . . . . . . : 255.255.255.0
Основной шлюз. . . . . . . . . : 192.168.1.254

Состояние среды. . . . . . . . : Среда передачи недоступна.
DNS-суффикс подключения . . . . . :

[General]
Version=4
displayName=Новый объект групповой политики

Необработанное исключение по адресу 0x77D2DF62 (msvcp120d.dll) в test3.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xFEEEFEEE.

В отладчике красным подсвечена переменная argv (аргумент функции main - указатель на массив аргументов командной строки). Если заменить return 0 на exit(0) выходит без ошибок. В чем может быть проблема?


2,951 3 3 золотых знака 13 13 серебряных знаков 26 26 бронзовых знаков


Проблема наверняка в fin.read(reinterpret_cast<char*>(&count1), . ) : вы читаете в std::string как в обычный буфер, а делать так категорически не стоит. std::string содержит указатель на буфер, который вы такой записью перезатираете и при попытке освободить память происходит ошибка.


49.5k 72 72 золотых знака 250 250 серебряных знаков 480 480 бронзовых знаков 9,596 4 4 золотых знака 19 19 серебряных знаков 35 35 бронзовых знаков Спасибо. Пробовал использовать буфер char array, но проблема осталась ровно та же - необработанное исключение при исполнении return 0. Строки так же адекватно записываются и считываются, как и в предыдущем случае. Обновляйте код. Пробуйте сначала только запись оставить, нужно найти минимальный код, который приводит к ошибке. Запись идет нормально, без ошибок, к ошибке приводит часть чтения. Еще раз спасибо, буду пытаться разобраться. Таки разобрался. Я не обнулял буфер перед записью и чтением. После обнуления все ОК. Спасибо. Ну вообще проблемы с чтением-записью в необнуленный буфер быть не должно, если остальной код корректен.

Программа не имеет смысла. В этом цикле

вы сохраняете в файле не строки вектора mystr , как вы очевидно предполагаете

то есть не "alfa", "beta", "gamma" и т.д., а внутреннее представление объектов std::string , которые не содержат эти строки, а содержат некоторую служебную информацию (свойства класса) как, например, адрес на динамически выделенную память, где действительно хранятся строки, некоторый локальный буфер, используемый для оптимизации хранения коротких строк и .т.д.

Хранить эту информацию бессмысленно. Вам надо записать в файл именно сами строки, а не эту служебную информацию. Причем записывая строки, вы должны также сохранять информацию о длине строки, иначе вы не сможете их затем правильно прочитать. Например,

формат записи для каждой строки мог бы быть следующим: длина строки, соответствующая значению, возвращаемому функцией класса std:;string dize() , а за ней сама строка символов.

Иначе у вас в этом цикле

будет выводиться на консоль всякий мусор, а при завершении программы компилятор попытается вызвать деструктор строк, и в результате выскочит ошибка, на подобие той, текст которой вы привели.

Компилятор создает ошибку C1083, когда не удается найти требуемый файл. Эта ошибка имеет несколько возможных причин. Наиболее распространенными причинами являются неверный путь поиска include или отсутствующие или неправильно именованные файлы заголовков, но другие типы файлов и проблемы могут также вызвать C1083. Ниже приведены некоторые распространенные причины, по которым компилятор создает эту ошибку.

Указано неверное имя файла

При вводе имени файла допущена ошибка. Например, примененная к объекту директива

Файл не включен в путь поиска включаемых файлов

Это указывает компилятору искать файл в том же каталоге, который содержит исходный файл, а затем искать в других местах, заданных средой сборки. Если кавычки содержат абсолютный путь, компилятор выполняет поиск файла только в этом расположении. Если кавычки содержат относительный путь, компилятор выполняет поиск файла в каталоге относительно исходного каталога.

Если имя заключено в угловые скобки,

Если включаемые файлы находятся в другом каталоге относительно исходного каталога и в директивах Include используется относительный путь, то вместо угловых скобок следует использовать двойные кавычки. Например, если файл заголовка myheader.h находится в подкаталоге именованных заголовков проекта, в этом примере не удается найти файл и вызывается C1083:

но этот пример работает:

Проблемы с библиотекой сторонних производителей и vcpkg

если вы видите эту ошибку при попытке настроить библиотеку стороннего производителя в рамках сборки, рассмотрите возможность использования vcpkg, диспетчера пакетов C++ для установки и сборки библиотеки. vcpkg поддерживает большой и растущей список библиотек сторонних производителейи задает все свойства конфигурации и зависимости, необходимые для успешной сборки в рамках проекта.

Файл находится в проекте, но не в пути поиска включаемых файлов

Чтобы устранить эту проблему, исправьте путь, используемый компилятором для поиска включаемого или импортируемого файла. В новом проекте используются пути поиска include по умолчанию. Может потребоваться изменить путь поиска include, чтобы добавить каталог для проекта. При компиляции в командной строке добавьте путь к переменной среды include или /I параметр компилятора, чтобы указать путь к файлу.

чтобы задать путь к каталогу включения в Visual Studio, откройте диалоговое окно страницы свойств проекта. выберите VC++ каталоги в разделе свойства конфигурации в левой области, а затем измените свойство включаемые каталоги . дополнительные сведения о каталогах для отдельных пользователей и проектов, поиск которых выполняется компилятором в Visual Studio, см. в разделе страница свойств VC++ directories. Дополнительные сведения о /I параметре компилятора см. в разделе /I (дополнительные каталоги включаемых данных).

Не задана среда командной строки INCLUDE или LIB

Если компилятор вызывается из командной строки, для указания путей поиска часто используются переменные среды. Если путь поиска, описанный в переменной среды include или lib , задан неправильно, может быть сформирована ошибка C1083. Мы настоятельно рекомендуем использовать ярлык командной строки разработчика, чтобы задать базовую среду для сборок с командной строкой. Дополнительные сведения см. в разделе сборка C/C++ в командной строке. Дополнительные сведения об использовании переменных среды см. в разделе инструкции. Использование переменных среды в сборке.

Возможно, файл заблокирован или используется

Если для изменения или доступа к файлу используется другая программа, файл может быть заблокирован. Попробуйте закрыть файл в другой программе. иногда другая программа может быть Visual Studio сама по себе при использовании параметров параллельной компиляции. Если отключить параметр параллельной сборки, то эта ошибка исчезнет, а это проблема. Эта проблема также может быть вызвана другими системами параллельной сборки. Будьте внимательны при задании зависимостей файлов и проектов, чтобы порядок сборки был правильным. В некоторых случаях рекомендуется создать промежуточный проект для принудительного создания последовательности зависимостей для общего файла, который может быть создан несколькими проектами. Иногда антивирусные программы временно блокируют недавно измененные файлы для проверки. Если возможно, рассмотрите возможность исключения каталогов сборки проекта из антивирусного сканера.

Включена неправильная версия имени файла

Предкомпилированные заголовки еще не скомпилированы

Если проект настроен для использования предварительно скомпилированных заголовков, необходимо .pch создать соответствующие файлы, чтобы можно было скомпилировать файлы, использующие содержимое заголовка. например, pch.cpp файл ( stdafx.cpp в Visual Studio 2017 и более ранних версий) автоматически создается в каталоге проекта для новых проектов. Сначала необходимо скомпилировать этот файл, чтобы создать предкомпилированные файлы заголовков. В типичном проекте процесса сборки это выполняется автоматически. Дополнительные сведения см. в разделе Создание предкомпилированных файлов заголовков.

Дополнительные причины

Вы установили пакет SDK или библиотеку стороннего производителя, но после установки пакета SDK или библиотеки не открывали новое окно командной строки разработчика. Если пакет SDK или библиотека добавляет файлы в путь поиска включаемых файлов, может потребоваться открыть новое окно командной строки разработчика, чтобы получить эти изменения переменных среды.

Файл использует управляемый код, но параметр компилятора /clr не указан. Дополнительные сведения см. в разделе /clr (компиляция среды CLR).

Файл компилируется с использованием другого параметра /analyze компилятора, чем используется для предварительной компиляции заголовков. При предварительной компиляции заголовков для проекта все должны использовать одни и те же /analyze Параметры. дополнительные сведения см. в разделе /analyze (Code Analysis).

файл или каталог был создан подсистема Windows для Linux, учитывается регистр в каждом каталоге, и указанный регистр пути или файла не соответствует регистру пути или файла на диске.

Файл, каталог или диск доступен только для чтения.

Visual Studio или средства командной строки не имеют достаточных разрешений для чтения файла или каталога. это может произойти, например, когда файлы проекта имеют разные права владения, чем процесс, выполняемый Visual Studio или программ командной строки. иногда эту ошибку можно устранить, запустив Visual Studio или командную строку разработчика от имени администратора.

Недостаточно дескрипторов файлов. Закройте часть приложений и повторите компиляцию. Эта ситуация маловероятна в обычных условиях. Однако она может возникать при построении крупных проектов на компьютере с ограниченной физической памятью.

Пример

В следующем примере создается ошибка C1083, если файл заголовка "test.h" не существует в исходном каталоге или в пути поиска include.

Сведения о том, как создавать проекты C/C++ в интегрированной среде разработки или в командной строке, а также сведения о настройке переменных среды см. в разделе проекты и сборки систем.

Читайте также: