summaryrefslogtreecommitdiff
path: root/gio/src/fileoutputstream.hg
blob: a31567bd113282610d79f6f48817d83974c70d10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/* Copyright (C) 2007 The gtkmm Development Team
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <giomm/outputstream.h>
#include <giomm/seekable.h>
#include <giomm/fileinfo.h>
#include <glibmm/object.h>
#include <glibmm/iochannel.h>


_DEFS(giomm,gio)
_PINCLUDE(giomm/private/outputstream_p.h)

namespace Gio
{


/** FileOutputStream provides output streams that write their content to a file.
 *
 * FileOutputStream implements Seekable, which allows the output stream to jump
 * to arbitrary positions in the file and to truncate the file, provided the
 * file system of the file supports these operations.
 * Use the methods of the Seekable base class for seeking and positioning.
 *
 * @ingroup Streams
 *
 * @newin{2,16}
 */
class FileOutputStream
: public OutputStream,
  public Seekable
{
  _CLASS_GOBJECT(FileOutputStream, GFileOutputStream, G_FILE_OUTPUT_STREAM, Gio::OutputStream, GOutputStream)
  _IMPLEMENTS_INTERFACE(Seekable)

public:

  /** Queries a file output stream for the given @a attributes .
   * This function blocks while querying the stream. For the asynchronous
   * version of this function, see query_info_async().
   * While the stream is blocked, the stream will set the pending flag
   * internally, and any other operations on the stream will throw a Gio::Error with
   * PENDING.
   *
   * Can fail if the stream was already closed (with a
   * CLOSED error), the stream has pending operations (with a PENDING error),
   * or if querying info is not supported for
   * the stream's interface (with a NOT_SUPPORTED error). In
   * all cases of failure, an empty RefPtr will be returned.
   *
   * The operation can be cancelled by triggering the cancellable object from another thread. If the operation
   * was cancelled, a Gio::Error with CANCELLED may be thrown, and an empty RefPtr will
   * be returned.
   *
   * @param cancellable A Cancellable object.
   * @param attributes A file attribute query string.
   * @return A FileInfo for the stream, or an empty RefPtr on error.
   */
  Glib::RefPtr<FileInfo> query_info(const Glib::RefPtr<Cancellable>& cancellable, const std::string& attributes = "*");

  /** Queries a file output stream for the given @a attributes .
   * This function blocks while querying the stream. For the asynchronous
   * version of this function, see query_info_async().
   * While the stream is blocked, the stream will set the pending flag
   * internally, and any other operations on the stream will throw a Gio::Error with
   * PENDING.
   *
   * Can fail if the stream was already closed (with a CLOSED error),
   * the stream has pending operations (with an PENDING error),
   * or if querying info is not supported for
   * the stream's interface (with a NOT_SUPPORTED error). In
   * all cases of failure, an empty RefPtr will be returned.
   *
   * The operation can be cancelled by triggering the cancellable object from another thread. If the operation
   * was cancelled, a Gio::Error with CANCELLED may be thrown, and an empty RefPtr will
   * be returned.
   *
   * @param attributes A file attribute query string.
   * @return A FileInfo for the stream, or an empty RefPtr on error.
   */
  Glib::RefPtr<FileInfo> query_info(const std::string& attributes = "*");
  _IGNORE(g_file_output_stream_query_info)



  /** Queries the stream information asynchronously.
   * When the operation is finished @a slot will be called.
   * You can then call query_info_finish()
   * to get the result of the operation.
   *
   * For the synchronous version of this function,
   * see query_info().
   *
   * The operation can be cancelled by
   * triggering the cancellable object from another thread. If the operation
   * was cancelled, a Gio::Error with CANCELLED may be thrown
   *
   * @param slot Callback to call when the request is satisfied.
   * @param cancellable A Cancellable object.
   * @param attributes A file attribute query string.
   * @param io_priority The <io-priority of the request.
   */
  void query_info_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const std::string& attributes = "*", int io_priority = Glib::PRIORITY_DEFAULT);

  /** Queries the stream information asynchronously.
   * When the operation is finished @a slot will be called.
   * You can then call query_info_finish()
   * to get the result of the operation.
   *
   * For the synchronous version of this function,
   * see query_info().
   *
   * @param slot Callback to call when the request is satisfied.
   * @param attributes A file attribute query string.
   * @param io_priority The <io-priority of the request.
   */
  void query_info_async(const SlotAsyncReady& slot, const std::string& attributes = "*", int io_priority = Glib::PRIORITY_DEFAULT);
  _IGNORE(g_file_output_stream_query_info_async)

  _WRAP_METHOD(Glib::RefPtr<FileInfo> query_info_finish(const Glib::RefPtr<AsyncResult>& result),
               g_file_output_stream_query_info_finish,
               refreturn, errthrow)

  _WRAP_METHOD(std::string get_etag() const, g_file_output_stream_get_etag)
};

} // namespace Gio