5

私はGJSを使用しようとしていますが、より正確にはテキストファイルを同期的に読み取ろうとしています。ファイル読み取り用の非同期関数の例を次に示します。

次の関数を使用してシードを続行する方法を見つけました

function readFile(filename) {
    print(filename);
    var input_file = gio.file_new_for_path(filename);
    var fstream = input_file.read();
    var dstream = new gio.DataInputStream.c_new(fstream);
    var data = dstream.read_until("", 0);
    fstream.close();
    return data;
}

残念ながら、GJS では動作しません。誰でも私を助けることができますか?

4

4 に答える 4

1

私は Cinnamon アプレットの開発に GJS を使用しているため、get_file_contents_utf8_sync関数を使用してテキスト ファイルを読み込んでいました。

const Cinnamon = imports.gi.Cinnamon;

let fileContent = Cinnamon.get_file_contents_utf8_sync("file path");

Cinnamon がインストールされていて、それを使用することに同意する場合、Cinnamon はあなたの質問に答えます。それ以外の場合は、 の関数
の C コードを次に示します。これが役立つことを願っています。get_file_contents_utf8_synccinnamon-util.c

char * cinnamon_get_file_contents_utf8_sync (const char *path, GError **error)
{
  char *contents;
  gsize len;
  if (!g_file_get_contents (path, &contents, &len, error))
    return NULL;
  if (!g_utf8_validate (contents, len, NULL))
    {
      g_free (contents);
      g_set_error (error,
                   G_IO_ERROR,
                   G_IO_ERROR_FAILED,
                   "File %s contains invalid UTF-8",
                   path);
      return NULL;
    }
  return contents;
}

シナモンのソースコード

于 2013-04-13T14:09:45.530 に答える
0

交換してみる

new gio.DataInputStream.c_new(fstream);

gio.DataInputStream.new(fstream);

それは私のために働いた

于 2014-11-18T10:34:39.410 に答える