在 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 */
+
运算符与您的操作数一起工作,但以不同的方式,它只执行指针运算,因为操作数是指针。
我正在尝试将我的 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 */
+
运算符与您的操作数一起工作,但以不同的方式,它只执行指针运算,因为操作数是指针。