Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Третий параметр в вызове fstream file.open()


Автор: oldm 20.11.2004, 20:13
Собственно сабж.
На константы используемые третим параметром, которые описаны в МСДНеsmile, компилер ВСВ6 ругается (реализации STL разные). В хэлпе ВСВ6 написано мякго говоря мало. И потому спрашиваю, что в 3 параметре должно быть. В частности интересует константа задающая так сказать "эсклюзивный" доступ(тобишь другие приложения не могут открыть файл).

Автор: setq 21.11.2004, 14:38
лично мне эта тема знакома плохо, поэтому помочь не обещаю. но обычно отвечать легче, если приведён кусочек кода, на который ругается компилятор.

Автор: Borisff2003 22.11.2004, 06:30
Ди и хотелось бы посмотреть на описание 3 го параментра в MSDN, а то я чтото не нашел

Автор: _hunter 23.11.2004, 11:08
Borisff2003, а что его искать? ищем fstream, смотрим его конструктори усе:
http://msdn.microsoft.com/library/en-us/vclang98/html/_iostream_fstream.3a3a.fstream.asp
setq, кусок кода может быть таким:
fstream file("file.dat", ios::in, filebuf::sh_none)

Автор: setq 24.11.2004, 10:48
_hunter, да быть-то он может в принципе любым. какой он есть на самом деле вот в чём вопрос... %)

Автор: _hunter 24.11.2004, 12:13
Цитата
какой он есть на самом деле вот в чём вопрос...

в смысле?
считай что такой и есть на самом деле ( разве что для красоты std:: спереди поприсобачивать )

Автор: oldm 29.11.2004, 23:10
Цитата(_hunter @ 23.11.2004, 11:08)
setq, кусок кода может быть таким:
fstream file("file.dat", ios::in, filebuf::sh_none)

Для VC да такой. Спора нет.
Для СBuider какой - вот вопрос smile .
Честно говоря тихо схожу с ума по этому поводу.

Автор: Borisff2003 30.11.2004, 06:29
в Builder -ой справке

Цитата

basic_ifstream(const char* s,
              ios_base::openmode mode= ios_base::in,
              long protection= 0666);

Constructs an object of class basic_ifstream<charT,traits>, initializing the base class basic_istream with the associated file buffer, which is initialized by calling the basic_filebuf constructor basic_filebuf<charT,traits>(). The constructor then calls the open function open(s,mode,protection) in order to attach the file, whose name is pointed to by s, to the basic_ifstream object. The third argument protection holds file permissions. It does not appear in the Standard C++ description and is included as an extension. It determines the file read/write/execute permissions under UNIX. It is more limited under DOS since files are always readable and do not have special execute permission.


А вот что в исходниках

Код

template <class _CharT, class _Traits>
class basic_ifstream : public basic_istream<_CharT, _Traits>
{
public:                         // Types
 typedef _CharT                     char_type;
 typedef typename _Traits::int_type int_type;
 typedef typename _Traits::pos_type pos_type;
 typedef typename _Traits::off_type off_type;
 typedef _Traits                    traits_type;

 typedef basic_ios<_CharT, _Traits>                _Basic_ios;
 typedef basic_istream<_CharT, _Traits>            _Base;
 typedef basic_filebuf<_CharT, _Traits>            _Buf;

public:                         // Constructors, destructor.

 basic_ifstream() :
   basic_ios<_CharT, _Traits>(),  basic_istream<_CharT, _Traits>(0), _M_buf() {
     this->init(&_M_buf);
 }

 explicit basic_ifstream(const char* __s, ios_base::openmode __mod = ios_base::in) :
   basic_ios<_CharT, _Traits>(),  basic_istream<_CharT, _Traits>(0),
   _M_buf() {
     this->init(&_M_buf);
     if (!_M_buf.open(__s, __mod | ios_base::in))
this->setstate(ios_base::failbit);
 }

# ifndef _STLP_NO_EXTENSIONS
 explicit basic_ifstream(int __id, ios_base::openmode __mod = ios_base::in) :
   basic_ios<_CharT, _Traits>(),  basic_istream<_CharT, _Traits>(0), _M_buf() {
   this->init(&_M_buf);
   if (!_M_buf.open(__id, __mod | ios_base::in))
     this->setstate(ios_base::failbit);
 }
# endif

 ~basic_ifstream() {}

public:                         // File and buffer operations.
 basic_filebuf<_CharT, _Traits>* rdbuf() const
   { return __CONST_CAST(_Buf*,&_M_buf); }

 bool is_open() {
   return this->rdbuf()->is_open();
 }

 void open(const char* __s, ios_base::openmode __mod = ios_base::in) {
   if (!this->rdbuf()->open(__s, __mod | ios_base::in))
     this->setstate(ios_base::failbit);
 }
.................

Заметь ни в одном конструкторе нет 3-го параметра. Видимо он вообще не используется smile

Автор: oldm 30.11.2004, 12:29
Цитата

Заметь ни в одном конструкторе нет 3-го параметра. Видимо он вообще не используется

Третий параметр появляется если перед #include <fstream.h> поставить
Код

#define _USE_OLD_RW_STL



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)