Ich versuche, eine Datei zu öffnen, indem ich die Ausgabe von zenity --file-selection
, aber ich habe ein Problem, wo die Datei nie öffnen und ich bekomme Error: 2 (No such file or directory)
von errno . Wenn ich jedoch einfach die Ausgabe von printf("%s", file_to_open);
kopiere und sie zwischen Anführungszeichen einfüge und sie an übergebe, funktioniert es wie beabsichtigt, obwohl es selbst nie funktioniert, wenn man file_to_open
übergibt. Ich laufe auf Linux, also sollte ich kein Problem mit '\' s haben.fopen kann Datei, die existiert, nicht öffnen, es sei denn, ich gebe eine Zeichenfolge ein
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
char * select_file(void)
{
static char path[1024];
memset(path, 0, sizeof(path));
FILE *fp = popen("zenity --file-selection --title=\"Choose Gameboy Rom\"", "r");
if(fp == NULL)
{
printf("Failed to run command, make sure you have zenity installed!\n");
exit(EXIT_FAILURE);
}
fgets(path, sizeof(path), fp);
pclose(fp);
return path;
}
int main(void)
{
FILE * fp;
char file_to_open[1024];
strcpy(file_to_open, select_file());
printf("%s", file_to_open);
fp = fopen(file_to_open, "r");
if(fp == NULL)
{
printf("Error: %d (%s)\n", errno, strerror(errno));
exit(EXIT_FAILURE);
}
fclose(fp);
return 0;
}
(ich gepostet zuvor auf programmers.stackexchange und mir wurde gesagt, hier zu posten)
Die von 'fgets()' zurückgegebene Zeichenfolge hat am Ende einen Zeilenumbruch. Der tatsächliche Dateiname wahrscheinlich nicht. – Barmar