2016-07-13 7 views
1

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)

+1

Die von 'fgets()' zurückgegebene Zeichenfolge hat am Ende einen Zeilenumbruch. Der tatsächliche Dateiname wahrscheinlich nicht. – Barmar

Antwort

1

Sie müssen die Newline vom Ende des path entfernen.

fgets(path, sizeof(path), fp); 
size_t lastpos = strlen(path) - 1; 
if (path[lastpos] == '\n') { 
    path[lastpos] = 0; 
} 
Verwandte Themen