Как копировать/переместить файл вне директории терминала?

 

Использовал CopyFileW из kernel32.dll но копировать так и не получилось. 

Пробовал на mql4.

#import "kernel32.dll"

bool CopyFileW(string lpExistingFileName, string lpNewFileName, bool failIfExists);

#import

CopyFileW("C:\Users\User1\AppData\Roaming\MetaQuotes\Terminal\90271F5A6EF646EE3A8805FDEE834716\tester\files\text.txt","D:\Alp",0);


 
Sheer:

Использовал CopyFileW из kernel32.dll но копировать так и не получилось. 

Пробовал на mql4.

#import "kernel32.dll"

bool CopyFileW(string lpExistingFileName, string lpNewFileName, bool failIfExists);

#import

CopyFileW("C:\Users\User1\AppData\Roaming\MetaQuotes\Terminal\90271F5A6EF646EE3A8805FDEE834716\tester\files\text.txt","D:\Alp",0);


Попробуйте так (не проверил, но бросилось в глаза):

...
CopyFileW("C:\\Users\\User1\\AppData\\Roaming\\MetaQuotes\\Terminal\\90271F5A6EF646EE3A8805FDEE834716\\tester\\files\\text.txt","D:\\Alp",0);
...
 
Sergey Eremin:

Попробуйте так (не проверил, но бросилось в глаза):

Спасибо , и так пробовал, но так тоже не работает.
 
Sheer:
Спасибо , и так пробовал, но так тоже не работает.
Вроде выглядит правильно. Почитайте про rtlgetlastwin32error и посмотрите какую ошибку функция возвращает
 
Комбинатор:
Вроде выглядит правильно. Почитайте про rtlgetlastwin32error и посмотрите какую ошибку функция возвращает

Я немного по другому смотрел значение ошибки Print("CopyFileW error#",kernel32::GetLastError()," mql5 error#",::GetLastError());

И возвращало либо 3, либо 123 (именно от кернел32), в зависимости от варианта указания пути...

Не могу найти, где посмотреть описание ошибок? 

 
Для того чтобы писать в корень диска нужны права администратора.
 
Sheer:

Я немного по другому смотрел значение ошибки Print("CopyFileW error#",kernel32::GetLastError()," mql5 error#",::GetLastError());

И возвращало либо 3, либо 123 (именно от кернел32), в зависимости от варианта указания пути...

Не могу найти, где посмотреть описание ошибок? 

3:

ERROR_PATH_NOT_FOUND

3 (0x3)

The system cannot find the path specified.

123:

ERROR_INVALID_NAME

123 (0x7B)

The filename, directory name, or volume label syntax is incorrect.

Источник: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

Алгоритм поиска: в гугле вбиваем название функции (CopyFileW), находим её описание. В описании будет упоминание GetLastError(), идём в описание GetLastError() и там находим ссылки на коды ошибок :)

System Error Codes (0-499) (Windows)
  • msdn.microsoft.com
The information on this page is intended to be used by programmers so that the software they write can better deal with errors. If you are an end-user that is experiencing difficulty with an application you are installing or running, contact customer support for the software that is displaying the error message. To obtain support for a...
 
Sergey Eremin:

3:

123:

Источник: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

Алгоритм поиска: в гугле вбиваем название функции (CopyFileW), находим её описание. В описании будет упоминание GetLastError(), идём в описание GetLastError() и там находим ссылки на коды ошибок :)

Спасибо, но теперь выдает ошибку 5, Access is denied.

Запускал терминал от админа, не помогло, что еще можно попробовать?

 
Sheer:

Спасибо, но теперь выдает ошибку 5, Access is denied.

Запускал терминал от админа, не помогло, что еще можно попробовать?

Хмм, даже не знаю, что ещё посоветовать. Явно ошибка в отсутствии прав доступа.

Может рассмотреть вариант копирования файлов куда-нибудь, куда будут права доступа? Например, в  "C:\\Users\\User1\\AppData\\Roaming\\Alp". Или, может, открыть доступ к D:\\Alp (в свойствах папки, хотя не уверен в успехе такой затеи).

Ну или понизить уровень UAC, хотя это дурная идея (если непонятно о чём речь, то гугл -> "понизить уровень UAC").

 
Sheer:

Спасибо, но теперь выдает ошибку 5, Access is denied.

Запускал терминал от админа, не помогло, что еще можно попробовать?

Админ тут не причем. Дайте необходимые права на нужную паку для "User1".
 
new-rena:
Админ тут не причем. Дайте необходимые права на нужную паку для "User1".
Если не получится дать полные права, то нужно будет сначала владельца сменить и указать своё имя пользователя и уже потом разрешить самому себе делать что угодно с этой папкой) 
Причина обращения: