若 要進行檔案的基本讀寫,您可以使用g_file_get_contents()、g_file_set_contents()函式,這兩個函式會對檔案作 整個讀取與整個寫入的動作。
以下直接以程式作為示範,您可以從命令列引數設定檔案來源與目的地,將檔案讀入,顯示在螢幕上並寫入另一個檔案:
- file_demo.c
#include <glib.h>
handle_error(GError *error) {
if(error != NULL) {
g_printf(error->message);
g_clear_error(&error);
}
}
int main(int argc, char *argv[]) {
gchar *src, *dest;
gchar *content;
gsize length;
GError *error = NULL;
if(argc >= 3) {
src = argv[1];
dest = argv[2];
}
else {
return 1;
}
if (!g_file_test(src, G_FILE_TEST_EXISTS)) {
g_error("Error: File does not exist!");
}
g_file_get_contents(src, &content, &length, &error);
handle_error(error);
g_print("%s\n", content);
g_file_set_contents(dest, content, -1, &error);
handle_error(error);
g_free (content);
return 0;
}
g_file_test()函式可以測試檔案的幾個狀態:
- G_FILE_TEST_IS_REGULAR: 不是符號連結檔或目錄
- G_FILE_TEST_IS_SYMLINK: 符號連結檔
- G_FILE_TEST_IS_DIR: 目錄
- G_FILE_TEST_IS_EXECUTABLE: 可執行檔
- G_FILE_TEST_EXISTS: 檔案是否存在
g_file_get_contents()可以指定檔案,將檔案讀入content中,並將長度讀入 length,如果讀取成功會傳回TRUE,失敗會傳回FALSE,錯誤相關資訊會設定給GError,而g_file_set_contents()的 使用類似,長度設定為-1表示寫入整個字串。
在 GtkTextView 中曾寫過一個與GTK圖形元件結合的檔案讀取程式。