Dahua NetSDK Ошибка 20: NET_OPEN_FILE_ERROR — Ошибка открытия/создания файла
Сбои при попытке начать локальную запись видеопотока или экспортировать снимок (снапшот):
- Функции
CLIENT_SaveRealData,CLIENT_CapturePictureилиCLIENT_DownloadByTimeExзавершаются с кодом20. - Файлы записи
.davили скриншоты.jpgне создаются на диске. - В системных логах регистрируется отказ в доступе к каталогу записи (Access Denied).
Ошибка NET_OPEN_FILE_ERROR (20) возникает, когда NetSDK не может создать или открыть файл по указанному локальному пути из-за отсутствия папки, недостатка прав NTFS/ext4 или блокировки антивирусом.
1. Проверка существования целевой директории
NetSDK не создает промежуточные подкаталоги автоматически. Если путь C:\Records\2025\05\cam1.dav содержит несуществующие папки, функция вернет ошибку 20.
// Создание дерева каталогов перед вызовом NetSDK (C++17 filesystem)
#include <filesystem>
namespace fs = std::filesystem;
std::string dirPath = "C:/Recordings/Camera_01/";
if (!fs::exists(dirPath)) {
fs::create_directories(dirPath);
}
CLIENT_SaveRealData(lRealHandle, (dirPath + "record.dav").c_str());2. Проверка прав учетной записи службы (Permissions)
- Если приложение запущено как служба Windows (Local System), пути сетевых дисков (
Z:\...) будут недоступны. Используйте только прямые UNC-пути вида\\192.168.1.50\share\records. - Убедитесь, что пользователю выданы права на запись (Write/Modify) в целевой каталог.
3. Проверка специальных символов и длины пути
- Исключите из имени файла запрещенные символы:
/ : * ? " < > |. - В Linux учитывайте регистрозависимость путей (case sensitivity).
Частые вопросы (FAQ)
Почему под администратором запись работает, а как служба — выдает ошибку 20?
Службы Windows запускаются в изолированной сессии 0 и не имеют доступа к сетевым дискам, подключенным в пользовательском сеансе.
Создает ли NetSDK вложенные папки самостоятельно?
Нет, библиотека NetSDK вызывает стандартный fopen/CreateFile, поэтому все родительские папки должны быть созданы заранее приложением.
Может ли антивирусное ПО блокировать создание .dav файлов?
Да, эвристические анализаторы и Ransomware-защита часто блокируют создание бинарных файлов неизвестными службами. Добавьте путь в исключения.
Что происходит при переполнении дискового пространства?
При полном исчерпании свободного места на носителе SDK также возвращает код ошибки 20 (NET_OPEN_FILE_ERROR).