Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
173 / 63 / 13
Регистрация: 22.12.2015
Сообщений: 2,645
1

Вызов функции потокового ввода-вывода со всеми параметрами

27.11.2017, 08:55. Показов 1095. Ответов 9
Метки нет (Все метки)

Всем здравствуйте.

В классе fstream есть функция
C++
1
void open(const char *fileName, int mode, int protection);
С первыми двумя параметрами недостатка в информации нет. Просто море!
Интересует третий параметр (protection). Вернее, пример с его использованием и возможные принимаемые им значения.
В книге В.В. Подбельского "Язык C++" стр. 435 говорится, что "...он определяет защиту и достаточно редко используется. Точнее он устанавливается по умолчанию и умалчиваемое значение обычно устраивает программиста." Изредка в сети встречается рекомендация изучать руководство конкретного компилятора. В большинстве случаев информации об этом параметре никакой.
Просмотрев возможные конструкторы класса fstream (8 шт) я нашёл и среди них интересующий меня третий параметр int _Prot. Где подсмотреть какие значения этот _Prot может принимать, примеров нигде не нашёл. Меня интересует значение _Prot соответствующее разрешению общего доступа к открытому уже файлу из других приложений.
(Работаю в VS2010)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2017, 08:55
Ответы с готовыми решениями:

Функции потокового ввода/вывода
Подскажите, пожалуйста, чем отличается fwrite/fread от fprintf/fscanf?

Перегрузка потокового ввода-вывода
Доброго времени суток!!! Возникла такая проблема: необходимо сделать перегрузку операций << и >>....

Библиотека потокового ввода/вывода
А верно ли, что данная библиотека является вещью абсолютно бесполезной для Windows-программирования...

Перегрузка потокового ввода/вывода
Вот сама перегрузка ostream& operator<< (ostream& out, Poli& outstream) { out<<"Степень...

9
7158 / 6133 / 2801
Регистрация: 14.04.2014
Сообщений: 26,455
27.11.2017, 09:19 2
В стандартном fstream нет такого. Здесь смотри: https://msdn.microsoft.com/en-... s.60).aspx
1
173 / 63 / 13
Регистрация: 22.12.2015
Сообщений: 2,645
27.11.2017, 12:22  [ТС] 3
nmcf,fstream Visual Studio 6 видимо отличается от fstream VS 2010. В указанной ссылке нашёл радостную информацию: режим общего доступа является умолчательным! Надеюсь это сохранилось и в VS 2010. Вот бы такую же ссылочку но для моей студии.

Добавлено через 19 минут
C++
1
2
3
        ofstream out(sFName, ios::binary, 64);
        out.write((char*)&buf, sizeof(buf));        // Записываем в файл байтовый массив buf
        out.close();                                // Сохраняем файл
здесь 64 dec это значение по умолчанию (0100 0000).
Всё работает. Но где найти инфу про третий аргумент, то есть про это число 64 (для моей студии)?
0
7158 / 6133 / 2801
Регистрация: 14.04.2014
Сообщений: 26,455
27.11.2017, 14:56 4
Поставь курсор на эту функцию и нажми F1. Должна открыться online-справка.
Там сказано, что этот параметр соответствует shflag: https://msdn.microsoft.com/en-... .140).aspx

Добавлено через 43 секунды
2010 - древняя. Бери 2013 и выше.
1
173 / 63 / 13
Регистрация: 22.12.2015
Сообщений: 2,645
27.11.2017, 15:07  [ТС] 5
nmcf, так я так и сделал, но не нашёл там перечисления констант нужных мне. Подставляю _SH_COMPAT, например, а студия ругается - говорит что не знает такой константы. Подскажите пожалуйста, что прицепить к проекту чтобы
Цитата Сообщение от nmcf Посмотреть сообщение
shflag
распознавались?

после посещения указанной ссылки вот только это и добавилось:
C++
1
ofstream out(sFName, ios::binary, ios_base::_Openprot);
0
7158 / 6133 / 2801
Регистрация: 14.04.2014
Сообщений: 26,455
27.11.2017, 15:12 6
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Потому что они определены в другом месте. Там же есть пример.
C++
1
#include <share.h>
1
173 / 63 / 13
Регистрация: 22.12.2015
Сообщений: 2,645
27.11.2017, 15:34  [ТС] 7
Цитата Сообщение от nmcf Посмотреть сообщение
#include <share.h>
не помогает.
C++
1
ofstream out(sFName, ios::binary, _SH_COMPAT);
всё равно не видит константу _SH_COMPAT. Или мне для работы с файлами использовать другую функцию (как в примере: _fsopen)?

Добавлено через 13 минут
nmcf, заработало!
C++
1
ofstream out(sFName, ios::binary, _SH_DENYNO);
Нафиг было в msdn заикаться про _SH_COMPAT если её не понимает студия?
Попутный доп вопрос в тему. После посещения указанной Вами ссылки msdn захотелось попробовать поработать с файлами предложенными там способами:
C++
1
2
3
4
5
6
        FILE *out;
        if( (out = _fsopen( sFName, "wb", _SH_DENYNO )) != NULL )
        {
            // ??????????
            fclose(out);
        }
А что вставить вместо
C++
1
 out.write((char*)&buf, sizeof(buf));
между открытием и закрытием потока, чтобы записать в файл содержимое буфера?
0
7158 / 6133 / 2801
Регистрация: 14.04.2014
Сообщений: 26,455
27.11.2017, 17:11 8
А для чего тебе _SH_COMPAT? Это какой-то устаревший флаг. Может, его уже убрали.
Цитата Сообщение от jkrnd Посмотреть сообщение
захотелось попробовать поработать с файлами предложенными там способами
Зачем тебе эта древность? Пользуйся fstream.
fwrite() там.
1
173 / 63 / 13
Регистрация: 22.12.2015
Сообщений: 2,645
27.11.2017, 17:36  [ТС] 9
nmcf, то есть вариант
C++
1
2
3
        ofstream out(sFName, ios::binary, _SH_DENYNO); 
        out.write((char*)&buf, sizeof(buf));            
        out.close();
наиболее "свежий"?
0
7158 / 6133 / 2801
Регистрация: 14.04.2014
Сообщений: 26,455
27.11.2017, 17:58 10
Да. Ну это же C++. Здесь потоки.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2017, 17:58

Перегрузка операторов потокового ввода вывода
Есть класс &quot;деканат&quot;, полем которого есть список студентов, объектов из класса &quot;Студент&quot;. Как...

Перегрузка операторов потокового ввода-вывода
Пожалуйста, ответе на такой вопрос: почему при написании класса, при перегрузке операторов...

Итераторы потокового ввода/вывода stl
Возник такой вопрос при изучении stl. Берем файл, из которого нужно считать данные, через copy...

Работа с файлами на уровне потокового ввода-вывода с буферизацией. С++
Всем здравствуйте. Помогите пожалуйста. Необходимо обеспечить выполнение следующих действий:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru