2016-07-13 11 views
1

私はzenity --file-selectionからの出力を解析することで、ファイルを開こうとしていますが、私は、ファイルを開いて決して問題を抱えていると私はエラー番号からError: 2 (No such file or directory)を取得し、存在して開いているファイルはできません。しかし、単にprintf("%s", file_to_open);の出力をコピーして引用符で囲み、fopenに渡すと、file_to_open自体が動作しなくても、意図したとおりに動作します。私はLinux上で動作しているので、 '\'に問題はないはずです。のfopenはI入力しない限り、文字列

#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; 
} 

あなたはpathの端から改行を削除する必要が

+1

'fgets()'によって返される文字列の最後に改行があります。実際のファイル名はおそらくありません。 – Barmar

答えて

1

を(私はprogrammers.stackexchangeに以前の投稿です、私はここに投稿するように言われました)。

fgets(path, sizeof(path), fp); 
size_t lastpos = strlen(path) - 1; 
if (path[lastpos] == '\n') { 
    path[lastpos] = 0; 
} 
関連する問題