AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.12.2006, 19:09   #1  
Eland is offline
Eland
Участник
 
31 / 12 (1) ++
Регистрация: 10.07.2006
Адрес: Москва
? WinAPI: Создание файла
Привет.

Пытаюсь вот создать файлик через winapi

X++:
    int                 _handle;   // Дескриптор файла
    _winApiDLL = new DLL('KERNEL32'); // Системная DLL     
    _createFile     = new DLLFunction(_winApiDLL, 'CreateFileA'); 
.... 
.... 
....      
_handle = _createFile.call(fileName, #GENERIC_WRITE | #GENERIC_READ, 0, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, 0); //Создаём файл 
....
И в _handle возвращается 65535, что означает, что что-то тут не так.

После надлежащей обработки:

X++:
[LEFT].... 
errorCode = DLL::lastDLLError(); //Получаем последнюю ошибку
error(WINAPI::formatmessage(errorCode)); //Получаем расшифровку из системы ....[/LEFT]
....
Получаем код ошибки 3, что в свою очередь означает, что путь не найден.
НО! Путь этот у меня есть. И вообще всё пучком. =( Вот только не хочет работать, редиска эдакая.. =(
Не знаю что и делать, всё перепробывал. Ребят, выручайте.

Последний раз редактировалось Eland; 18.12.2006 в 19:15.
Старый 18.12.2006, 20:25   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Eland Посмотреть сообщение
Привет.

Пытаюсь вот создать файлик через winapi
X++:
_createFile = new DLLFunction(_winApiDLL, 'CreateFileA'); 
....      
_handle = _createFile.call(fileName, #GENERIC_WRITE | #GENERIC_READ,
            0, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, 0);
Получаем код ошибки 3, что в свою очередь означает, что путь не найден.
НО! Путь этот у меня есть.
Речь не обязательно идет именно о пути к файлу. Если файл нужно создать, то вместо #OPEN_EXISTING надо использовать #CREATE_NEW либо - для затирания уже имеющихся файлов - #CREATE_ALWAYS. Если существующий файл затирать не надо, следует использовать #OPEN_ALWAYS. Читайте первоисточник.
Старый 18.12.2006, 20:49   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вообще-то прежде всего я бы предложил почитать методы класса WinApi - тогда и велосипед бы не пришлось писать.
Старый 19.12.2006, 08:45   #4  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Не будем мучить человека
2 Eland: Экую Вы жесть написали... Я бы не смог
Но тем не менее файлы создавать умею
PHP код:
WinApi::createFile(str fileNameint flags #OPEN_ALWAYS, int access = 0, int shareMode = 0) 
Старый 19.12.2006, 09:23   #5  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Если отвлечься от того, что метод уже есть, то как вариант причины ошибки: путь указан для локальной машины, а код выпоняется на сервере (или наоборот).
Старый 19.12.2006, 15:29   #6  
Eland is offline
Eland
Участник
 
31 / 12 (1) ++
Регистрация: 10.07.2006
Адрес: Москва
Ребят. Спасибо за помощь.

На настоящий момент решения этой проблемы нет =(
Пока что без глюков получается сохранять файлы только по сети через самбу (smb).
Понятия не имею, с чем это связано. =(
Может кто может подсказать ?


2 gl00mie: Пробовал использовать самые разные атрибуты - результат тот же.
2 Raven Melancholic: От места выполнения кода мало что зависит. Говорит, что не может найти путь и со стороны клиента и со стороны сервера при существующих папках.
2 Sada: Эта штука тоже работает, только возвращает она не то, что мне надо. =(
Старый 19.12.2006, 15:50   #7  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
2Eland:
Чем не устраивает ВинАпишный метод? Что вам нужно получить на выходе?
Опишите если можно задачу поконкретнее.
Старый 19.12.2006, 16:03   #8  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Сообщение от Eland Посмотреть сообщение
Пока что без глюков получается сохранять файлы только по сети через самбу (smb).
Это как, можно поподробнее? В смысле - тем же самым приведенным фрагментом кода? Так значит, всё-таки дело в пути к файлу?

Если да - то надо смотреть, что не так с Вашим путем... Например, есть ли в нем русские символы и включена ли поддержка Unicode в ОС. Достаточно ли прав доступа текущему пользователю. Не забыли ли задвоить слэши в строке... Ну и так далее...
Старый 19.12.2006, 18:06   #9  
Eland is offline
Eland
Участник
 
31 / 12 (1) ++
Регистрация: 10.07.2006
Адрес: Москва
2 Sada: Так ведь это и есть апишный метод. Тот же самый, только его использование напрямую из системной dll_ки, а не через класс.

В общем, убрал модификатор методов server и т.д. и всё заработало. Но это меня не устраивает. Надо чтобы файлы формировались на сервере. И методы должны выполняться там же.

А задача примерно следующая:
Создать файл на стороне сервера, записать туда данные и отправить это всё хозяйство по сети cтандартными средствами винды. (По протоколу samba (smb))
Иными словами скопировать в сетевую папку.
Старый 19.12.2006, 19:48   #10  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от Eland Посмотреть сообщение
А задача примерно следующая:
Создать файл на стороне сервера, записать туда данные и отправить это всё хозяйство по сети cтандартными средствами винды. (По протоколу samba (smb))
Иными словами скопировать в сетевую папку.
А сервер у вас под каким пользователем запущен?
Этому пользователю доступна нужная папка?
Старый 20.12.2006, 09:24   #11  
Eland is offline
Eland
Участник
 
31 / 12 (1) ++
Регистрация: 10.07.2006
Адрес: Москва
Да пользователь имеет права в домене достаточные для записи на сетевой ресурс.
Старый 20.12.2006, 09:49   #12  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от Eland Посмотреть сообщение
Да пользователь имеет права в домене достаточные для записи на сетевой ресурс.
О каком пользователе речь?
Старый 20.12.2006, 14:58   #13  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Покажите инициализацию переменной fileName
Старый 21.12.2006, 15:35   #14  
Eland is offline
Eland
Участник
 
31 / 12 (1) ++
Регистрация: 10.07.2006
Адрес: Москва
Значение fileName (выдрано из дебагера):

c:\test\test4\info.txt
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Создание текстового файла в кодировке DOS Pismarkina DAX: Программирование 5 18.06.2012 14:57
создание текстового файла mit DAX: Программирование 2 14.07.2006 14:08
Возникла проблема с получением имени файла при создании своего канала вывода отчетов. oleg_kap DAX: Программирование 3 06.06.2006 14:12
Создание меточного файла Evgeniy A DAX: Программирование 8 16.12.2005 07:55
Документооборот. Создание файла по шаблону. NJD DAX: Программирование 4 11.05.2005 10:52

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:43.