2013-02-27 2 views
1

Я создал текстовый файл в d: диск с именем abc. Я не могу открыть его. Скажите, пожалуйста, как это сделать.Я не могу открыть файл в c

#include<stdio.h> 
#include<conio.h> 
#include<stdlib.h> 
void main() 
{ 
    FILE *fp; 
    clrscr(); 
    fp = fopen("D:/abc.txt","r"); 
    if(fp == NULL) 
    { 
     printf("\nCannot open"); 
     getch(); 
     exit(1); 
    } 
    fclose(fp); 
    getch(); 
} 
+1

проверить 'errno' или использовать' GetLastError' –

+0

1) conio.h является нестандартным заголовком. 2) main() должен возвращать int 3) MS-dos использует обратную косую черту вместо косой черты. 4) диагностический вывод должен идти в stderr, 5) и добавление \ n к нему приведет к его видимости. – wildplasser

+0

Вы должны быть более конкретными на своей платформе (OS) и компиляторе. Я просто проверил с Visual Studio в Windows 7, и он также работает с '/' (хотя это и было моей первой мыслью). Вы уверены, что файл существует и доступен для чтения? –

ответ

1

В следующий раз попытайтесь сделать ошибку более конкретной, используя функцию perror(). Perror() интерпретирует код ошибки, это поможет вам потратить меньше времени, пытаясь найти тип ошибки.

добавить это в вашем коде ...

if(fp == NULL) 
{ 
perror(fp); 
} 

На ход я получил сообщение PError

Нет такого файла или каталога. (так как я запустил программу и попытался прочитать файл, не создавая его первым)

Посмотреть, если это была та же проблема, в вашем случае

+0

Я работаю над dosbox. По-моему, возможно, именно поэтому мой файл открывается в той же папке (bin), а не на другой. – rippy

+0

он также дает ошибку Нет такого файла или каталога. но в cmd с помощью команды dir отображается файл (abc.txt). – rippy

+2

Да может быть файл, присутствующий в D: \ Но есть ли D: \ доступный для DosBOX? Я не уверен в этом ... Итак, вместо открытия «D: \\ abc.txt» откройте «abc.txt» ... Файл будет считан в том же каталоге, что и исполняемый файл. Но сначала создайте файл, прежде чем читать его –

5

У вас есть опечатка, попробуйте

fp = fopen("D:\\abc.txt","r"); 

вместо этого.

Или, если файл находится в той же папке, что и программа:

fp = fopen("abc.txt","r"); 
+0

Я попробовал, все еще не работает – rippy

+1

На какой платформе и на ком компиляторе вы? MS-Windows также принимает '/' –

+0

, он работает для одной и той же папки, но не в другой папке. – rippy

4

выправить путь, он должен быть "D:\\abc.txt"

2
fp = fopen("D:/abc.txt","r"); 

должен быть

fp = fopen("D:\\abc.txt","r"); 

в используйте \ в пути вместо / в Windows и дополнительных \ для escape-последовательности.

EDIT:

Как вы прокомментировали другие ответы, которые fp = fopen("D:\\abc.txt","r"); также не работает, то проверьте, что имя на самом деле. Возможно, вы ошибочно указали неправильное имя, проверьте, есть ли у вас ошибка.

(1) Откройте окно командной строки
(2) использовать команду DIR, чтобы печатать имя файла:

c:\Users\name> D: 
D:\> DIR 
Volume in drive D is FUN BOX 
Volume Serial Number is B48A-3CE7 

Directory of d:\ 

27-02-2013 19:23     0 abc.txt.txt 
26-02-2013 22:05 <DIR>   BOLLYWOOD MOVIES 
27-02-2013 19:31     0 x 
      2 File(s)    0 bytes 
      1 Dir(s) 11,138,654,208 bytes free 

имя файла abc.txt.txt, но когда вы видите это в расширении папки не появляется и имя файла выглядит abc.txt

Я пользователь Linux, и я обычно делаю эту ошибку в Windows. Вот почему. Может быть, это поможет вам!

+0

Я попробовал это. На моем компьютере отображается abc.txt – rippy

+0

@rippy и еще 'fp = fopen (« D: \\ abc.txt »,« r »);' не работает? –

+0

nope все еще не работает – rippy

3

Путь к файлу выглядит немного странно. Измените его на

fp = fopen("D:\\abc.txt","r"); 

Это может сработать.

Кроме этого, включите <errno.h> и проверьте его, если он потерпел неудачу.

+0

попробовал это тоже, но все равно не работает – rippy

+0

Делать '#include ' и когда 'fp == NULL' проверять значение в' errno'. См. [Здесь] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms737828 (v = vs.85) .aspx) –

1

Если вы работаете с TurboC поместить этот файл в каталог BIN TC. И укажите путь как fp = fopen ("abc.txt", "r"); вместо любого другого альтернативного пути.