L'Isola di Niente
L'Isola di Niente » Gjs Tips » GFile

GFile

# 最終更新日 2017.02.05

URI から読み込む
#!/usr/bin/gjs

/*
 * afp:// や dav:// 等でアクセス可能な URI なら読み込み可能
 * 「こんにちは sasakima-nao です」と表示できたら成功
**/

const Gio = imports.gi.Gio;

let uri = Gio.file_new_for_uri("http://palepoli.skr.jp/tips/gjs/test.dat");
let [ok, contents, etag_out] = uri.load_contents(null);
if (ok)
    print(contents.toString());
else
    print("アクセスできません");

ファイルの詳細を得る
#!/usr/bin/gjs

const Gio = imports.gi.Gio;
const Format = imports.format;
const System = imports.system;

String.prototype.format = Format.format;

let res = "\
----------\n\
Name        : %s\n\
Size        : %d byte\n\
Content Type: %s\n\
Description : %s\n\
----------";

// 自身の詳細
let f = Gio.file_new_for_path(System.programInvocationName);
// GFileInfo の引数に得たい項目をコンマ区切りで指定
let info = f.query_info(
    "standard::name,standard::content-type,standard::size",
    Gio.FileQueryInfoFlags.NONE,
    null
);
// Content Type は説明で使うので先に得る
let contentType = info.get_content_type();
// 出力
print(res.format(
    info.get_name(),
    info.get_size(),
    contentType,
    Gio.content_type_get_description(contentType)
));

/* output
----------
Name        : info.js
Size        : 952 byte
Content Type: application/javascript
Description : JavaScript プログラム
----------
*/

ディレクトリ内容列挙
#!/usr/bin/gjs

/*
 * ディレクトリや隠しファイルも関係なく取得されます
 * standard::* 指定しないと GFileInfo から確認できませんので注意
**/

const Gio = imports.gi.Gio;
 
let gFile = Gio.file_new_for_path("/home/sasakima-nao");
let fileEnumerator = gFile.enumerate_children(
    "standard::type,standard::is-hidden,standard::is-backup",
    Gio.FileQueryInfoFlags.NONE,
    null
);
for (;;) {
    let info = fileEnumerator.next_file(null);
    if (info == null) break;
    if (info.get_is_hidden()) continue;
    if (info.get_is_backup()) continue;
    if (info.get_file_type() == Gio.FileType.DIRECTORY) continue;
    print(info.get_name());
}

コピー、移動、ゴミ箱
#!/usr/bin/gjs

/*
 * first.txt というファイルを作成してから試してください
 * move.txt が残り copy.txt がゴミ箱にあれば成功
**/

const Gio = imports.gi.Gio;

let f = Gio.file_new_for_path("first.txt");
if (f.query_exists(null)) {
    // Copy
    let c = Gio.file_new_for_path("copy.txt");
    f.copy(c, Gio.FileCopyFlags.NONE, null, null);
    // Move
    let m = Gio.file_new_for_path("move.txt");
    f.move(m, Gio.FileCopyFlags.NONE, null, null);
    // Trash
    c.trash(null);
}

Copyright(C) sasakima-nao All rights reserved 2002 --- 2017.