почему Write file не может исп. объект напрямую, без дескриптора
От: Santuz  
Дата: 12.12.13 19:24
Оценка: -2
Здравствуйте!
собственно вопрос: почему Write file не может использовать объект напрямую, и ему обязательно нужен дескриптор?
4-я строчка с конца.
Заранее благодарен...



void Save(HWND hEdit, LPCTSTR pszFileName)
{
    HANDLE hFile;
    BOOL bSuccess = FALSE;

    hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, NULL,
        CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
   // hFile != INVALID_HANDLE_VALUE
    
        DWORD dwTextLength;

        dwTextLength = GetWindowTextLength(hEdit);
        // No need to bother if there's no text.
        if(dwTextLength > 0)
        {
            TCHAR* pszText;
            DWORD dwBufferSize = dwTextLength + 1;

            pszText = (TCHAR*)new TCHAR[dwBufferSize];
            if(pszText != NULL)
            {
                if(GetWindowText(hEdit, pszText, (dwBufferSize-1)))
                {
                    DWORD dwWritten;

                    pszText[dwBufferSize-1]=NULL;
                   

                    if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL))
                        bSuccess = TRUE;
                }
                delete pszText;
            }
        }
        CloseHandle(hFile);
    
    //return bSuccess;
}
win api дескриптор
Re: почему Write file не может исп. объект напрямую, без дескриптора
От: BlackEric http://black-eric.lj.ru
Дата: 12.12.13 20:05
Оценка: 2 (1)
Здравствуйте, Santuz, Вы писали:

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

S>собственно вопрос: почему Write file не может использовать объект напрямую, и ему обязательно нужен дескриптор?
S>4-я строчка с конца.
S>Заранее благодарен...

Что значит на прямую? Функция же должна знать с какому файлу обращаться.
https://github.com/BlackEric001
Re[2]: почему Write file не может исп. объект напрямую, без дескриптора
От: Santuz  
Дата: 12.12.13 23:23
Оценка: -2
Здравствуйте, BlackEric, Вы писали:

BE>Что значит на прямую? Функция же должна знать с какому файлу обращаться.


Прошу прощения, если не правильно выразился, дело в том, что это вопрос преподавателя мне, а я не очень сильно во всём этом разбираюсь...
То-есть получается, что функция сама по себе вызвать объект не может, и для этого ей требуется дескриптор...я правильно понял?

и ещё...на вопрос: "почему не может?", какой ответ будет правильным...

заранее благодарен...
Re: почему Write file не может исп. объект напрямую, без дескриптора
От: code_monkey  
Дата: 13.12.13 00:36
Оценка: 2 (1)
Здравствуйте, Santuz, Вы писали:

S>почему Write file не может использовать объект напрямую, и ему обязательно нужен дескриптор?


потому, что Windows API не дает доступ к объектуFILE_OBJECT
Re: почему Write file не может исп. объект напрямую, без дескриптора
От: Аноним  
Дата: 13.12.13 01:33
Оценка: 2 (1) +2
Потому, что защита. Доступ к обьектам осуществляется через ссылки(описатели). Дескриптором называть это не корректно, это хэндл. Ну а учитель лопух.
Re[2]: почему Write file не может исп. объект напрямую, без дескриптора
От: Santuz  
Дата: 13.12.13 02:28
Оценка: :)
Всем большое спасибо!
Re: почему Write file не может исп. объект напрямую, без дескриптора
От: lgb Канада  
Дата: 18.12.13 21:50
Оценка:
Здравствуйте, Santuz, Вы писали:

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

S>собственно вопрос: почему Write file не может использовать объект напрямую, и ему обязательно нужен дескриптор?
S>4-я строчка с конца.
S>Заранее благодарен...

Считайте, что hFile — это некое устройство, которое можно включить, использовать, и выключить.
Для этого у вас есть инструменты: чтобы включить — CreateFile, чтобы использовать — WriteFile, ReadFile и т.п., а чтобы выключить — CloseFile.

Поэтому понятно, что нельзя начать использовать устройство, пока оно не включено.
Точно так же понятно, что после использования устройство обязательно надо выключить ("Уходя, гасите свет!") во избежание разных несчастий.

Устройство запомнает свое состояние каждый раз после того, как в нем поковырялись инструментами.
Если бы у вас не было дескриптора устройства и нужно было бы использовать объект напрямую, то вам пришлось бы самостоятельно запоминать и управлять тучей состояний этого устройства.
Re: почему Write file не может исп. объект напрямую, без дескриптора
От: smeeld  
Дата: 18.12.13 23:01
Оценка:
Здравствуйте, Santuz, Вы писали:

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

S>собственно вопрос: почему Write file не может использовать объект напрямую, и ему обязательно нужен дескриптор?

Понятие дескриптора файла есть во всех ОС. И его смысл заключается в реализации системных вызовов ОС для операций
с объектами, которые представляет ОС-файлы, сокеты, каналы. В случае с файлами, дескриптор-это числовой идентификатор
открытого файла. Именно дескриптор связывает конкретные операции с конкретным файлом. По дескриптору, передаваемому
через системный вызов, драйвер файловой системы распознаёт с какими структурами данных, относящихся к открытому
файлу проводить операции. Эти структуры создаются и инициализируются в ядре при каждом открытии файла драйвером
файловой системы, и дескриптор является числовым идентификатором этих структур. В ядре ОС имеется промежуточная
подсистема между драйвером файловой системы и реализацией системнах вызовов для работы с файлами. И создание
и передача драйвером файловой системы дескриптора это её требование. Соответствующий интерфейс есть часть
процедуры регистрации драйвера файловой системы в ядре.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.