| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1158 人关注过本帖
标题:打开文件的问题
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
已结贴  问题点数:10 回复次数:18 
打开文件的问题
被这个问题搞晕了,
图片附件: 游客没有浏览图片的权限,请 登录注册
我输入的文件名是真实的绝对路径为什么打不开?
(这个文件上写了几个阿拉伯数字。)
#include <stdio.h>
#include <stdlib.h>

void main ()
{
    int i,len,k;
    FILE *fp;
    char infile[30];
    printf("输入要打开的文件名如c:\\test.txt:\n");
    scanf("%s",infile);
   
    if((fp=fopen(infile,"r"))==NULL)
    {
        printf("不能打开文件!\n");
        exit(0);
    }
    printf("\n读取数据中……\n");
    fscanf(fp,"%d",&len);//读入记录数
    for(i=0;i<len;i++)
    {
       fscanf(fp,"%d",&k);
    }
    fclose(fp);
    printf("*****读取数据成功!****\n");
}
搜索更多相关主题的帖子: include 阿拉伯 
2011-12-25 10:14
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:1 
你输入d:\\file\\112.txt试试

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-12-25 10:33
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:1 
直接放到工程的当前目录下面就行了

                                         
===========深入<----------------->浅出============
2011-12-25 11:04
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
谢谢两位我去试试。

梅尚程荀
马谭杨奚







                                                       
2011-12-25 14:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
試成功了沒有?

授人以渔,不授人以鱼。
2011-12-25 14:36
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
收藏
得分:0 
我测试exe文件成功了啊   格式:d:\snow.exe
2011-12-25 16:06
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 5楼 TonyDeng
试了2位的办法 还是不能打开文件。后来我撇开了这个程序,重新写了录入信息程序:输入文件名并在原程序中给出输入信息存放在其中,结果在DEBUG文件后发现了一个刚才输入的文件名的新文件,并能用一个读文件信息的程序读出来,我用的是fread读的,fscanf还不知怎么用。

总结后发现,可以通过C程序创建新文件并在其中录入信息,如果手动创建新文件,并在c程序的录入信息函数中使用这个文件名,会在此文件所在目录产生一个和他名字一样的文件,哈哈,同名文件出现在同一个文件夹中?如果手动创建一个新文件并在其中直接由用户写上信息,再在C程序中用文件指针指向他并试图打开它是不行的。

不知道我总结的这些东西是不是对的?

梅尚程荀
马谭杨奚







                                                       
2011-12-25 17:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:8 
你程序的寫法錯誤而已。用戶手動寫數據文件而程序無法讀入,這種情況可以想象嗎?一個程序如果連這樣的環境也應付不來,那就叫沒有絲毫實用性。另外,無法跨文件夾、跨驅動器盤讀寫文件的程序,也是沒有用的。

看看控制臺上你敲鍵盤時,輸入的是什麽、而程序讀成什麽就知道了。你敲12,實際上是在控制臺流文本文件stdin上手寫字符串"12",但程序讀成什麽,關鍵是你用scanf("%d")讀還是scanf("%s")讀。文本文件和數据文件的區別,你還要再仔細鑽研,好過去弄什麽算法。不懂這些東西,最簡單的程序也寫不出來,沒有絲毫可使用價值。從用戶早已編制好的數據文本中讀入數據,是計算機應用中最廣泛的情景,不懂這個,不要自稱懂編程。不要用學生只學簡單東西來糊弄,學生學習的就是要真正運用來工作的東西,不是花拳繡腿。

[ 本帖最后由 TonyDeng 于 2011-12-25 17:58 编辑 ]

授人以渔,不授人以鱼。
2011-12-25 17:54
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 8楼 TonyDeng
恩。我现在学习基本的知识,很多东西不清楚,希望您多指教。

梅尚程荀
马谭杨奚







                                                       
2011-12-25 19:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
文件處理,首先要區分文本文件還是二進制文件,因此C函數庫中給出"t"和"b"的打開模式選項,你先查看這個問題的相關資料。其次,既然要用戶手寫數據,那麽數據文件往往就是文本文件(與敲鍵盤在屏幕上呈現一樣),在記事本裏輸入,就是文本文件(其實你寫的C程序源代碼,也是文本文件)。程序用"t"模式打開文本文件之後,讀取的數據本質上全部是字符串,整個文件就是一個大字符串,所有數據,都要你在程序中把字符串轉換為需要的真實數據類型。因此,用scanf("%d", &i)處理字符串"12",就是把字符串"12"轉換為整數再賦給i,這個轉換過程scanf()函數替你做了;若用scanf("%s", s)處理同樣的數據"12",則scanf()知曉只要字符串而不會做數據轉換(受%s控制,因此%d、%s之類其實是scanf()和printf()函數的動作指示提示符)。也就是說,你只要用"rt"打開文本文件,想象裏面是用戶在屏幕敲好的一大堆數據(把文件看成屏幕即可),不斷按程序設定的數據格式用fscanf()函數讀入就是了。這種文本文件,用程序輸出時,是用fprintf()打印出去的(仍然是把文件看成屏幕)。

二進制模式不同,必須用fread()來讀,用fwrite()寫出去,每個數據都嚴格對應。也就是說,如果你用fread()來讀文本文件的數據,一定是得到錯誤數據(文件能打開,但得不到你想要的)。

從上面所說的,你可以看到,scanf()多了一個數據轉換過程,而且數據全部是以字符串形式儲存的,佔文件空間大,讀寫都慢。但它的優勢是直接可以用人眼看到數據,方便輸入和排版處理,修改也方便,是用戶離綫輸入數據的最佳形式。不過缺點除了慢之外,還在於這種數據是明文的,沒有加密措施,敏感數據不能這樣儲存。然而,字符串格式儲存數據,有另外一個二進制文件無法替代的優勢,它的數值格式是絕對精確的,不會被二進制編碼改爲近似數,當你對數值的精度非常在意時,就必須採取這個辦法。

一個文件,是客觀實在,但它在你的程序中呈現的形態,與你打開它的模式有關。用"t"打開.exe、.jpg之類文件,程序把每一個字節都當作char,而且,在遇到0時終結字符串,而我們知道,這類文件中的0非常多。對用"b"打開的任何文件,都簡單地逐個byte讀取而已,不存在終結符,它視數據為内存映像。

[ 本帖最后由 TonyDeng 于 2011-12-25 20:19 编辑 ]

授人以渔,不授人以鱼。
2011-12-25 20:07
快速回复:打开文件的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.069414 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved