root/platform/gecko/jsm/file.jsm @ 4407

Revision 4407, 2.2 kB (checked in by drry, 7 years ago)

platform/gecko/jsm/file.jsm: ちょっぴり再構成、意味的な変更はなし。

  • Property svn:mime-type set to text/javascript
Line 
1// vim:ft=javascript:
2// // sample
3// Components.classes["@mozilla.org/network/io-service;1"]
4//           .getService(Components.interfaces.nsIIOService)
5//           .getProtocolHandler("resource")
6//           .QueryInterface(Components.interfaces.nsIResProtocolHandler)
7//           .setSubstitution("coderepos.org", IO.newURI("file:///Users/cho45/coderepos/platform/gecko/jsm/"));
8// Components.utils.import("resource://coderepos.org/file.jsm");
9
10// var file = IO.getFile("Temp", "test.txt")
11// File.write(file, "foobar");
12// log(File.read(file));
13
14EXPORTED_SYMBOLS = ["File"];
15
16const Cc = Components.classes;
17const Ci = Components.interfaces;
18const IO = Cc["@mozilla.org/io/scriptable-io;1"].getService();
19
20File = {
21        read : function (file, mode) {
22                return File.open(file, mode || "text", function (s) {
23                        var res = [], str;
24                        while (str = s.readString(4096)) res.push(str);
25                        return res.join("");
26                });
27        },
28
29        write : function (file, content, mode) {
30                return File.open(file, mode || "write text", function (s) {
31                        s.writeString(content);
32                });
33        },
34
35        open : function (file, mode, func) {
36                var file = File.toFile(file);
37                var write, charset, strm;
38                mode.replace(/write|charset=(\S+)/g, function (_, v) {
39                        if (v) charset = v;
40                        else   write   = true;
41                        return "";
42                });
43                strm = IO[write ? "newOutputStream" : "newInputStream"](file, mode, charset);
44                try {
45                        var ret = func.call(file, strm);
46                } finally {
47                        strm.close();
48                }
49                return ret;
50        },
51
52        // toFile("path/to/file");
53        // toFile(["Temp", "filename.txt"]);
54        // toFile(fileobject);
55        toFile : function (file) {
56                if (typeof file == "string") {
57                        return IO.getFileWithPath(file);
58                } else
59                // 外部からのとだと(?) instanceof がつかえないようだ
60                if (file.constructor.name == "Array") {
61                        return IO.getFile(file[0], file[1]);
62                } else {
63                        return file;
64                }
65        }
66};
67
68// debug
69function log () {
70        var message = Array.prototype.slice.call(arguments).map(function (i) {
71                if (typeof i == "object") return String(i);
72                return uneval(i);
73        });
74        var console = Components.classes["@mozilla.org/consoleservice;1"]
75                                .getService(Components.interfaces.nsIConsoleService);
76        try {
77                console.logStringMessage(message);
78        } catch(e) {
79                Components.utils.reportError(message);
80        }
81};
Note: See TracBrowser for help on using the browser.