4104

 

Здравствуйте!

Пытаюсь создать файл и получаю 4104. Как с этим бороться?

Понимаю, что это тема юмора, но ответа я в форуме не нашёл :(

 
4104 файла вместо одного?
 

Шутка))

ошибка 4104 - "incompatible access to a file", т.е. проблема либо с правами доступа, либо с чем-то еще, что не позволяет провести создание файла. Залогиньтесь под администратором, проверьте свои права на папку и создание файлов в ней, ....

 
pvr:

Здравствуйте!

Пытаюсь создать файл и получаю 4104. Как с этим бороться?

Понимаю, что это тема юмора, но ответа я в форуме не нашёл :(

Странно что на форуме не нашли. Буквально полчаса назад тема тут https://www.mql5.com/ru/forum/133408 обсуждалась
 
alsu:

Шутка))

ошибка 4104 - "incompatible access to a file", т.е. проблема либо с правами доступа, либо с чем-то еще, что не позволяет провести создание файла. Залогиньтесь под администратором, проверьте свои права на папку и создание файлов в ней, ....

Да, я вижу, что атрибуты папки c:\Program Files (x86)\Alpari NZ MT4\experts\ "Только для чтения (применимо только к файлам папки)". Я работаю под Администратором и снимаю флажок "Только для чтения". Выполняется без предупреждений. Но когда я опять смотрю Атрибуты, то опять вижу "Только для чтения".

А текст очень простой:

int init()

{

int Res;

FName = "File.txt";

Handle = FileOpen(FName, FILE_WRITE);

S = "Начало";

Res = FileWriteString(Handle, S, StringLen(S));

if (Res == -1)

Alert("Handle = " + Handle + " Code = " + GetLastError());

FileClose(Handle);

return(0);

}

 

Вот кнопкой SRC:

int init()
  {
   int Res;
   FName = "File.txt";
   Handle = FileOpen(FName, FILE_WRITE);
   S = "Начало";
   Res = FileWriteString(Handle, S, StringLen(S));
   if (Res == -1)
      Alert("Handle = " + Handle + "   Code = " + GetLastError());
   FileClose(Handle);
   return(0);
  }
 
pvr:

Вот кнопкой SRC:

зайдите Свойства -> вкладка "Безопасность", там найдите администратора и посмотрите чтоб были права на запись и создание файлов, а лучше вообще станьте владельцем.
 
надо ставить все права и на всех, пользователя создателя и админа. легче вынести папку с терминалом в корень, или на другой диск.
 
FAQ:
надо ставить все права и на всех, пользователя создателя и админа. легче вынести папку с терминалом в корень, или на другой диск.

Всё перепробовал - и в корень С:, и в корень Е:, и права дал всем, кто есть в системе - ничего не помогает. Кстати, после того как перенёс в корень, в папку experts\filles стали копироваться файлы безо всяких вопросов. Что делать - не понимаю :(
 

На самом деле код такой:

int init()
  {
   int Res;
   string S;
   string FName = Symbol() + "_" + DateForFileName(TimeCurrent())  + ".txt";
   
   Alert("IsExpertEnabled = " + IsExpertEnabled() + "  " +
      "FName = " + FName);
   Handle = FileOpen(FName, FILE_WRITE);
   S = "Начало";
   Res = FileWriteString(Handle, S, StringLen(S));
   if (Res == -1)
      Alert("Handle = " + Handle + "   Code = " + GetLastError());
   FileClose(Handle);
   return(0);
  }

Сообщения получаю такие:

IsExpertEnabled = 1 FName = EURUSD_2012_04_09.txt

Handle = 1 Code = 4104

При этом создаётся файл нулевой длины.

 
Пробуйте:
int init()
  {
   int Res;
string  FName = "File.txt";
int   Handle = FileOpen(FName, FILE_BIN|FILE_WRITE);
string   S = "Начало";
   Res = FileWriteString(Handle, S, StringLen(S));
   if (Res == -1)
      Alert("Handle = " + Handle + "   Code = " + GetLastError());
   FileClose(Handle);
   return(0);
  }
Причина обращения: