檔案路徑(相對路徑、絕對路徑)、檔案讀入,匯出

匿名李
檔案路徑(相對路徑、絕對路徑)
相對路徑:相對位置
ex:學校在我的左手邊100公尺。
ex:檔案在現在位置的上一層位置向上
- ./ 當前位置
- ../ 上一層位置
- ../../ 上上一層位置
向下
- ./ 當前位置
- ./xxx 下一層位置
- ./xxx/ooo 下下一層位置
./test.txt
絕對路徑:絕對位置
ex:我在座標(0,100)的位置。
ex:檔案在C槽裡Users資料夾的user資料夾裡
C:\\Users\\user\\Desktop\\探路客新手教學\\test.txt

test.txt
- 備註1:程式中檔案位置的輸入需用(" ")包住。ex:"./test.txt"
- 備註2:加上 \ 表示跳脫,c++中\\是一種跳脫字元,它表示一個\(反斜線)
- 備註3:資料夾與檔案名稱應盡量使用英文表示,以免無法正常讀取
檔案讀入、匯出
標頭檔
#include <iostream> // 從一個給定的檔案讀取
#include <fstream> // 讀寫一個給定的檔案
IO運算子
<<與>>
<<:輸出 (cout<<"印出來"<<endl)
>>:讀取 (cin>>x)

IO運算子
Output
x = 5 y = 10 z = 15

檔案位置

test.txt
檔案讀入(fstream運算)
- fstream fstrm(s);
創建fstrm並開啟叫做s的檔案
fstrm.good(); 確定檔案的資料流傳送正常
fstrm.is_open(); 是否有成功開啟檔案,回傳bool(true or false)
fstrm.close(); 關閉檔案
- std::istream::getline
從一個檔案,讀取“一行”輸入到給定的string中
fstream inp(filename); //創建inp並開啟叫做filename的檔案
string rest;
std::getline(inp, rest); //持續提取inp,直到rest停止
備註(檔案讀到最後,想從頭開始再讀一次):
inp.clear();
inp.seekg(0, inp.beg);
檔案匯出(ofstream運算)
- ofstream ofstrm(s);
創建fstrm並開啟叫做s的檔案
outp.close(); //關閉檔案
練習
X,Y,Z文字檔(.txt)
【test.txt】
5 10 15
20 30 40
70 80 90
1 2 3
7 8 9
0 1 0
Code
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main(){
vector<int> xx; //放x座標
vector<int> yy; //放y座標
vector<int> zz; //放z座標
// 【檔案讀入】
fstream inp("./test.txt");
if (! inp.good()) {
return false;
}
string rest;
int line = 0;
while(std::getline(inp, rest)){
line++; //一行一行讀,每行讀完都+1
}
inp.clear();
inp.seekg(0, inp.beg);
for (size_t i = 0; i < line; i++) {
int x, y, z;
string rest;
inp >> x >> y >> z;
xx.push_back(x); //存入x座標
yy.push_back(y); //存入y座標
zz.push_back(z); //存入z座標
std::getline(inp, rest);
}
// 【檔案匯出】
ofstream outp("./test_output.txt"); //創建outp並開啟叫做filename的檔案
if (! outp.good()) {
return false;
}
outp << "XYZ座標 " << "\nint x int y int z";
for (size_t i = 0; i < line; i++) {
outp << "\n" << xx[i] << " " << yy[i] << " " << zz[i];
}
outp.close(); //關閉檔案
}

X,Y,Z文字檔(1/2)

X,Y,Z文字檔(2/2)
Output

input

ouput
參考資料
[1]. ios::good - C++ Reference (cplusplus.com)
[2]. istream::getline - C++ Reference (cplusplus.com)
[3]. 記錄用: 105.07.03 C++計算讀取檔案行數 (aben20807.blogspot.com)
[4]. C\C++编程中:相对路径+绝对路径 - vranger - 博客园 (cnblogs.com)
[5]. 跳脫字元 | C++與演算法 (ntu.edu.tw)
延伸閱讀
下一篇:C++ 新手教學9 | 方格子 (vocus.cc)