Чтение в .txt файл с другим расширением в C - PullRequest
1 голос
/ 04 апреля 2011

В настоящее время у моей программы нет проблем с чтением в файле .txt, но моей программе нужно читать в текстовом файле с другим расширением файла (требуется .emu). При простом изменении расширения того же файла на .emu переменная 'file' равна NULL и, следовательно, файл не открывается, кто-нибудь может помочь?

Немного огляделся и не смог найти решение, поэтому любая помощь очень ценится

вот исходный код:

void handleArgs (const char *filename, int trace, int before, int after) {
FILE *file = fopen(filename, "r");
char *address = malloc(MAX_ADD_LENGTH * sizeof(char));
char *instruction = malloc(MAX_INS_LENGTH * sizeof(char));
long int addressDecoded;

if (file == NULL || file == 0) {
    fprintf(stderr, "Error: Could not open file");
}
else {
    if (ferror(file) == 0) {
        while (fscanf(file, "%s %s", address, instruction) != EOF) {
            if (strlen(address) == 8 && strlen(instruction) == 8) {
                addressDecoded = strtol(address, NULL, 16);
                printf("%ld\n", addressDecoded);
                //instruction = decodeInstruction(instruction);
            }
            else {
                fprintf(stderr, "Error: particular line is of wrong length");
            }

        }
    }
}

fclose(file);

}

аргумент 'имя файла' при выполнении просто '/foopath/test.emu'

Ответы [ 2 ]

4 голосов
/ 04 апреля 2011

В расширении файла нет ничего особенного для C.Перечитайте свой код для простых ошибок, таких как изменение имени файла в одном месте, но не в другом.Если вы передаете имя файла, передайте полное имя, а не только часть слева от периода.

1 голос
/ 05 апреля 2011

Файлы являются данными и имеют имена.То, что стоит перед точкой в ​​имени, является такой же частью его, как и то, что следует после - расширения были созданы так же, как подсказки относительно того, что содержит файл, но они НЕ являютсятребуется быть строго связанным с содержимым файла .

Файл может не существовать или ваших прав доступа может быть недостаточно для его открытия.Или, может быть, есть какая-то другая ошибка.Как вы можете диагностировать это?

Когда вы используете системный вызов, и он не ведет себя так, как вы хотите, есть переменная с именем errno в errno.h (#include <errno.h>), которая будет содержатьномер, представляющий статус последнего вызова.Существует огромный список символьных констант для присвоения имен этим значениям, вы можете найти его в Google.

Например, если вы пытаетесь открыть файл, а возвращаемый указатель бесполезен, вы можете проверить errno чтобы увидеть, существует ли файл, или вы превышаете системные ограничения для открытых файлов и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...