注册 登录
编程论坛 C++教室

如何读取计算机中的文件

ClarenceC 发布于 2014-02-09 17:59, 1248 次点击
int reservefile(string &filename,vector<string>& cont)
{
    ifstream infile;
    infile.close();
    infile.clear();
    infile.open(filename.c_str());
    if(!infile)
        return 1;
    string line;
    while(getline(infile,line)){
        cont.push_back(line);
    }
    infile.close();
    if(infile.eof())
        return 2;
    if(infile.bad())
        return 3;
    if(infile.fail())
        return 4;
}
int main()
{
    vector<string> cont;
    string filename;
    cout<<"enter your file name : "<<endl;
    cin>>filename;
        //检验错误
    switch(reservefile(filename,cont)){
    case 1:
        cout<<"error: can't open : "<<filename<<endl;
        return -1;
    case 3:
        cout<<"error: system failure "<<endl;
        return -1;
    case 4:
        cout<<"error: read failure "<<endl;
        return -1;
    }
    istringstream instr;
    string str;
         //输出每一个单词
    for(vector<string>::const_iterator ip=cont.begin();ip!=cont.end();++ip){
        instr.str(*ip);
        while(instr>>str){
            cout<<str;
        }
            instr.clear();
    }
    return 0;
}
现在希望读取计算机中的文件,如何确定文件的路径?请指教
                                                      谢谢
24 回复
#2
TonyDeng2014-02-09 18:02
不知道你遇到什麽問題
#3
ClarenceC2014-02-09 18:04
回复 2楼 TonyDeng
我在代码后列出了我希望解决的问题,我想读计算机中的一个文件,如何确定文件路径呢?
#4
TonyDeng2014-02-09 18:10
文件放在哪裏,在打開文件的函數參數中輸入完整的路徑。你的問題本身就模糊不清,程序搜索文件是會使用系統環境的搜索列表的,如果文件存在搜索路徑之中,就不需要完整的路徑也能找到,如果不在,就找不到——但程序首先在自己所在的目錄中尋找文件!實際上你這不是程序的問題,而是對操作系統使用的瞭解問題。
#5
ClarenceC2014-02-09 18:22
我在D盘创建了一个文档(ok),怎么无法打开呢?
#6
TonyDeng2014-02-09 18:25
你又不把輸入和運行時的現象描述清楚,跟你說不知道你遇到什麽問題,還說已經說清楚了,怎麽答你?
#7
ClarenceC2014-02-09 18:28
现在运行程序的时候,我输入文档名-ok(已创建于D盘中),然后程序输出错误-无法打开文件。
#8
TonyDeng2014-02-09 18:33
既然進入了case 1選擇分支,你不會在這個分支中寫一句輸出filename到底是什麽内容的代碼進行調試嗎?1是那個自定義函數返回的,進去裏面逐步看它到底爲什麽返回1啊。文件在你磁盤上,別人不可能替你調試錯誤,要學會自己調試,這纔是你需要學的,不要等別人找到答案再告訴你,那學不到東西的。
#9
ClarenceC2014-02-09 18:42
不好意思,呵呵,我给你说一下我的情况吧:我对这程序的理解是-我输入了文件名(ok),然后程序就应该要打开该文件,如果打不开,就输出错误(如程序中所写);我还不懂得如何调试呢,我才开始学(学校还没开课,我先自己学着),我觉得我能编出这个程序都好高兴了,书上没介绍如何确定路径并调试,不得已来请教。
#10
ClarenceC2014-02-09 18:44
就请您告诉我哪里错了,我再去书上翻,网上找,然后学。
#11
TonyDeng2014-02-09 18:49
你返回1是在這裏
程序代码:

infile.open(filename.c_str());
    if(!infile)
        return 1;

在前面加一行輸出filename及filename.c_str()的語句,運行時看看是什麽内容。直接在infile.open()函數中寫正確的文件名,看看能否打開。關鍵是檢查能够正確打開時的文件名字符串是否與當前讀到的filename.c_str()一樣。僅僅用open()的返回真假是無法告訴你真正原因的,應用操作系統返回的錯誤碼,那才是最清晰的答案。

[ 本帖最后由 TonyDeng 于 2014-2-9 19:01 编辑 ]
#12
TonyDeng2014-02-09 18:52
你機器上的毛病,我怎麽可能知道你錯在哪裏,真好笑了。運行時出現的外部數據問題,靠別人告訴你答案,基本上是不可能的。你不想自己調試就算了吧,我不會替你做這種事,別的人或者有那閑工夫。
#13
ClarenceC2014-02-09 18:54
回复 8楼 TonyDeng
对于您的“在分支中寫一句輸出filename到底是什麽内容的代碼進行調試”有点模糊
#14
ClarenceC2014-02-09 18:58
回复 12楼 TonyDeng
您可能误会我了,我绝没有不想调试的意思,我确实不知道如何去调试,您说是机器的毛病,但我也不知道如何去调试机器,是我对计算机了解太少了,而我觉没有不想把这问题弄清楚的意思。
#15
TonyDeng2014-02-09 19:06
11樓告訴你怎麽做了。總之凡是文件無法打開的問題,解決思路是一樣的:首先用硬編碼(直接寫文件名字符串)打開文件,看是否成功,然後把文件名替換爲變量,追踪變量是否確實與之前的硬編碼是完全一樣的。文件無法打開的可能性有很多,千奇八怪的原因,不是僅僅用邏輯真假就可以的,查閲open()函數的手冊資料,看它怎麽說在返回假的時候該怎麽定位問題,庫函數參考資料,永遠是你手頭的必備書,不要沒擁有這些資料就學寫程序。本來教C++的書上在講流文件讀寫時都應該講這個問題的,如果你看的書沒這方面的内容,那就不是什麽很好的教材了。

程序就是這樣反復改出來的,運行時發生的問題,是程序員編程生涯絕大部分時間面對的問題,他的時間和精力主要都花在這裏,很痛苦的,最好有心理準備。

[ 本帖最后由 TonyDeng 于 2014-2-9 19:13 编辑 ]
#16
ClarenceC2014-02-09 19:11
回复 15楼 TonyDeng
呵呵,我还在奇怪11楼是怎么出来的呢。谢谢您了。
#17
ClarenceC2014-02-09 19:13
回复 15楼 TonyDeng
咦,怎么刚才的那一楼更改了呢?
#18
TonyDeng2014-02-09 19:16
以下是引用ClarenceC在2014-2-9 19:13:21的发言:

咦,怎么刚才的那一楼更改了呢?

作者隨時可以修改自己帖子的呀
#19
ClarenceC2014-02-09 19:19
回复 15楼 TonyDeng
咦,怎么又改了呢?您是怎么做到的呢?我是很喜欢编程的,我学计算机专业的,呵呵,我自己找的教材(不知道什么教材好),我这个寒假还没停过编程呢。gratitudes to you
#20
ClarenceC2014-02-09 19:20
回复 18楼 TonyDeng
oh!!!
#21
ClarenceC2014-02-09 19:23
回复 18楼 TonyDeng
您可以介绍一些好的必备的编程参考资料吗?(我怕我在网上去问的是不好的资料,耽误时间)
#22
TonyDeng2014-02-09 19:29
其實問題多數在你的系統搜索路徑沒包含D:\目錄,而你程序的運行時目錄也不在D:\上,僅僅輸入ok是找不到這個文件的,輸入D:\ok看看。解決的方法有很多,不想要輸入D:\ok這樣的絕對路徑,就在系統上設置path搜索環境包含D:\目錄,這些方案都可以嘗試。知道越多的、各式各樣的錯誤可能是怎樣發生的,才能幫助你寫出好程序,這纔是實踐經驗。很多人寫了程序,自己也沒運行多少次,用回避可能出現問題的方式來運行自己的程序(當然了因爲他深知自己的程序在什麽時候會出問題就避過了),沒有把自己放在不瞭解程序細節的用戶角度來寫程序,那樣是不行的。
#23
TonyDeng2014-02-09 19:34
標準庫函數參考手冊,編譯器自己的幫助系統,這才是最權威的學習資料。比如有人用VC,爲了省點磁盤空間,安裝不帶幫助的簡版,祇能耽誤自己的學習和使用。滿世界找資料,都不如人家作者自己給出的文檔更權威,都是從那裏抄出來的,不必捨近求遠。最好的老師是使用中的編譯器!
#24
ClarenceC2014-02-09 19:46
回复 23楼 TonyDeng
非常感谢您!感觉到您对编程的造诣好高啊,不仅是编程还有对系统的了解!还好我早做好了要走一条长久之路的打算,路漫漫其修远兮,吾将上下而求索(我记在心里的)不然我也该回避这个问题了,今天学到了很多!我还要去学习一下设置pace,呵呵。

[ 本帖最后由 ClarenceC 于 2014-2-9 19:50 编辑 ]
#25
fl89622014-02-12 04:18
回复 24楼 ClarenceC
造诣这个词太大了。。造诣和成就这两个词不能轻易用,依稀记得当年某节语文课。。。
1