在C + WebkitGTK中获取文件路径

时间:2015-01-15 18:07:28

标签: c gtk

我正在尝试将我的Web应用程序编译为C语言中的本机桌面应用程序。但是我在使用C语言中抓取文件路径时遇到了一些麻烦。

在PyGTK中,我会使用......

import webkit, pygtk, gtk, os

path=os.getcwd()
print path
web_view.open("file://" + path + "/index.html")

但是我不确定我是在寻找错误的地方还是在寻找什么,但是当我搜索Google时,我无法找到如何在C中获取我想要使用的文件路径此

gchar* uri = (gchar*) (argc > 1 ? argv[1] : "file://" + path + "app/index.html");

而不是像这样奇怪的方式链接到它......

gchar* uri = (gchar*) (argc > 1 ? argv[1] : "file://" + /home/michael/Desktop/kodeWeave/linux/app/index.html");
webkit_web_view_open (web_view, uri);

这是我的完整项目(如果有帮助的话)。

#include <stdio.h>
#include <string.h>
#include <gtk/gtk.h>
#include <webkit/webkit.h>

static WebKitWebView* web_view;

void on_window_destroy (GtkObject *object, gpointer user_data) {
  gtk_main_quit();
}

int main (int argc, char *argv[]) {
  GtkBuilder *builder;
  GtkWidget  *window;
  GtkWidget  *scrolled_window;

  gtk_init(&argc, &argv);

  builder = gtk_builder_new();
  gtk_builder_add_from_file (builder, "browser.xml", NULL);
  window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
  scrolled_window = GTK_WIDGET (gtk_builder_get_object (builder, "scrolledwindow1"));
  g_signal_connect (G_OBJECT (window), "delete-event", gtk_main_quit, NULL);

  gtk_window_set_title(GTK_WINDOW(window), "kodeWeave");

  web_view = WEBKIT_WEB_VIEW (webkit_web_view_new());
  gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (web_view));

  gtk_builder_connect_signals (builder, NULL);

  g_object_unref (G_OBJECT (builder));

  gchar* uri = (gchar*) (argc > 1 ? argv[1] : "file:///home/michael/Desktop/kodeWeave/linux/app/index.html");
  webkit_web_view_open (web_view, uri);

  gtk_widget_grab_focus (GTK_WIDGET (web_view));
  gtk_widget_show_all (window);

  gtk_main();

  return 0;
}

1 个答案:

答案 0 :(得分:1)

你不能使用+运算符来连接c中的字符串,你可能需要snprintf,首先你需要一个足够大的缓冲区,可能是常量PATH_MAX会工作,它在limits.h中定义,例如

char uri[PATH_MAX];
char cwd[PATH_MAX];

getcwd(cwd, sizeof(cwd));

if (argc > 1)
    snprintf(uri, sizeof(uri), "%s", argv[1]);
else
    snprintf(uri, sizeof(uri), "file://%s/index.html", cwd);
    /*                                  ^ %s specifier for ^ this char pointer */

+运算符可以处理您的操作数,但是以不同的方式,它只执行指针运算,因为操作数是指针。