Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
jkrnd
95 / 54 / 11
Регистрация: 22.12.2015
Сообщений: 1,544
1

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

27.11.2017, 08:55. Просмотров 726. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2017, 08:55
Ответы с готовыми решениями:

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

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

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

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

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

9
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
27.11.2017, 09:19 2
В стандартном fstream нет такого. Здесь смотри: https://msdn.microsoft.com/en-us/library/aa243822(v=vs.60).aspx
1
jkrnd
95 / 54 / 11
Регистрация: 22.12.2015
Сообщений: 1,544
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
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
27.11.2017, 14:56 4
Поставь курсор на эту функцию и нажми F1. Должна открыться online-справка.
Там сказано, что этот параметр соответствует shflag: https://msdn.microsoft.com/en-us/library/8f30b0db(v=vs.140).aspx

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

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

Решение

Потому что они определены в другом месте. Там же есть пример.
C++
1
#include <share.h>
1
jkrnd
95 / 54 / 11
Регистрация: 22.12.2015
Сообщений: 1,544
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
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
27.11.2017, 17:11 8
А для чего тебе _SH_COMPAT? Это какой-то устаревший флаг. Может, его уже убрали.
Цитата Сообщение от jkrnd Посмотреть сообщение
захотелось попробовать поработать с файлами предложенными там способами
Зачем тебе эта древность? Пользуйся fstream.
fwrite() там.
1
jkrnd
95 / 54 / 11
Регистрация: 22.12.2015
Сообщений: 1,544
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
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
27.11.2017, 17:58 10
Да. Ну это же C++. Здесь потоки.
1
27.11.2017, 17:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2017, 17:58

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

Библиотека потокового ввода-вывода и контейнерные классы.Дешифровка
Задание:Создать функцию, которая расшифровывает зашифрованный файл на основании...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru