在 C + WebkitGTK 中抓取文件路径

Grab File Path in C + WebkitGTK

我正在尝试将我的 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;
}

您不能使用 + 运算符在 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 */

+ 运算符与您的操作数一起工作,但以不同的方式,它只执行指针运算,因为操作数是指针。