Closed Bug 289400 Opened 21 years ago Closed 10 years ago

nsIFileOutputStream.writeFrom() is not implemented

Categories

(Core :: Networking: File, defect)

defect
Not set
normal

Tracking

()

RESOLVED INVALID

People

(Reporter: surkov, Unassigned)

Details

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; ru-RU; rv:1.7.5) Gecko/20041108 Firefox/1.0 (ax) Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8b) Gecko/20050217 When I try to call writeFrom() method of nsIFileOutputStream interface then I get exception: Error: uncaught exception: [Exception... "Component returned failure code: 0x80004001 (NS_ERROR_NOT_IMPLEMENTED) [nsIFileOutputStream.writeFrom]" nsresult: "0x80004001 (NS_ERROR_NOT_IMPLEMENTED)" data: no] Reproducible: Always Steps to Reproduce:
Status: UNCONFIRMED → NEW
Ever confirmed: true
this is intentional http://lxr.mozilla.org/seamonkey/source/netwerk/base/src/nsFileStreams.cpp#461 466 // File streams intentionally do not support this method. 467 // If you need something like this, then you should wrap 468 // the file stream using nsIBufferedOutputStream but I forgot the reason, I'll let darin comment before marking this invalid
OS: Windows 2000 → All
Hardware: PC → All
Usually, if your stream doesn't implement WriteSegments, then it doesn't implement WriteFrom. To implement WriteFrom for nsFileOutputStream, we'd need to create a temporary buffer, read from the source input stream into that temporary buffer, and then PR_Write the buffer to the file. This is no more efficient than if the caller used the nsFileOutputStream::Write method directly. Additionally, WriteFrom could check to see if the input stream supported ReadSegments, and if so it could use that to avoid the intermediate buffer copy. But, it cannot rely on the input stream supporting ReadSegments. So, the only reason for not implementing WriteFrom is for consistency with other unbuffered output streams. I think it might be nice for consumers if we exposed buffered file streams that do this object wrapping automatically. @mozilla.org/network/buffered-file-input-stream;1 @mozilla.org/network/buffered-file-output-stream;1 These could just initialize a buffered stream using the default necko buffer parameters (segment size and max count), and wrap it around the apprioriate file stream. However, the challenge with that is that we'd need a way to still expose the nsIFile{In,Out}putStream interfaces via QI.
Assignee: darin → nobody
QA Contact: benc → networking.file
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → INVALID
You need to log in before you can comment on or make changes to this bug.