Added read-only support to FileStream

This commit is contained in:
Stephen F. Booth 2011-05-28 13:29:06 -04:00
parent e92ed0a830
commit a04da3f159
2 changed files with 23 additions and 15 deletions

View File

@ -68,7 +68,7 @@ struct FileNameHandle : public std::string
class FileStream::FileStreamPrivate
{
public:
FileStreamPrivate(FileName fileName);
FileStreamPrivate(FileName fileName, bool openReadOnly);
FILE *file;
@ -79,7 +79,7 @@ public:
static const uint bufferSize = 1024;
};
FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName) :
FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName, bool openReadOnly) :
file(0),
name(fileName),
readOnly(true),
@ -91,12 +91,16 @@ FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName) :
if(wcslen((const wchar_t *) fileName) > 0) {
file = _wfopen(name, L"rb+");
if(file)
readOnly = false;
else
if(openReadOnly)
file = _wfopen(name, L"rb");
else {
file = _wfopen(name, L"rb+");
if(file)
readOnly = false;
else
file = _wfopen(name, L"rb");
}
if(file)
return;
@ -105,12 +109,16 @@ FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName) :
#endif
file = fopen(name, "rb+");
if(file)
readOnly = false;
else
if(openReadOnly)
file = fopen(name, "rb");
else {
file = fopen(name, "rb+");
if(file)
readOnly = false;
else
file = fopen(name, "rb");
}
if(!file)
{
@ -122,9 +130,9 @@ FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName) :
// public members
////////////////////////////////////////////////////////////////////////////////
FileStream::FileStream(FileName file)
FileStream::FileStream(FileName file, bool openReadOnly)
{
d = new FileStreamPrivate(file);
d = new FileStreamPrivate(file, openReadOnly);
}
FileStream::~FileStream()

View File

@ -52,7 +52,7 @@ namespace TagLib {
* Construct a File object and opens the \a file. \a file should be a
* be a C-string in the local file system encoding.
*/
FileStream(FileName file);
FileStream(FileName file, bool openReadOnly = false);
/*!
* Destroys this FileStream instance.