Я предоставляю клиенту приложение, разработанное на Visual C ++, и оно хорошо работает в моей среде. К сожалению, мой клиент получает ошибку 22, когда _tfopen
это вызов.
Вот небольшой фрагмент кода, похожий на код, который я написал в этом приложении:
#include "pch.h"
#include <iostream>
#include <stdio.h>
#include <wchar.h>
#include "tchar.h"
FILE* fp;
int openFile(const TCHAR* p, const TCHAR* r)
{
errno_t err = 0;
fp = _tfopen(p, r);
if (!fp)
{
err = errno;
_tprintf(_T("Error %d, can't open file: %s with rights %s"), err, p, r);
}
else
{
printf("All is ok\n");
}
return err;
}
int main()
{
openFile(_T("\\\\127.0.0.1\\hidden_folder$\\folder\\video_file.mxf"), _T("rb"));
return 0;
}
Мой клиент получает:
Error 22, can't open file: \\127.0.0.1\hidden_folder$\folder\video_file.mxf with rights rb
Ошибка 22 означает EINVAL
для неверных аргументов. Но, в моем случае, аргументы корректируются (согласно журналу).
Какие могут быть причины такого поведения?
Я много чего пытался воспроизвести эту ошибку: удалите video_file.mxf, измените местоположение файла, измените права файла, ... Это не имеет значения, я никогда не получал ошибку 22.
Примечания:
- Я знаю,
_tfopen
устарел, я также создал версию, которая использует _tfopen_s
, проблема все еще существует.
- Это не дубликат этого вопроса , потому что, в моем случае, у меня нет ошибки, и я хочу воспроизвести ее (чтобы понять, как ее исправить).