2017-01-01 57 views
0

我的程序應該使用隱藏文本文件來跟蹤用戶的名稱。但是,當程序啓動時,如果在同一個目錄中找不到'Name.txt'文件,它會生成一個對用戶可見的文件。這意味着用戶可以查看它,修改它等等。我怎樣才能防止這種情況發生,只有我的程序可以修改文件?另外,有沒有更好的方法來保持用戶名稱的知識(請記住,我是一般的編程新手,不僅僅在C++世界中)?如何製作無需顯示即可使用.txt文件的C++程序

#include "stdafx.h" 
#include <fstream> 
#include <iostream> 
#include <string> 
#include <Windows.h> 

using std::string; 
using std::cout; 
using std::cin; 
using std::ifstream; 
using std::ofstream; 

int main() 
{ 
    string line; 
    ifstream example; 
    example.open("Name.txt"); 
    getline(example, line); 
    if (line.compare("") == 0) { 
     example.close(); 
     string con; 
     cout << "Welcome to this program!\n"; 
     cout << "Do you want to register? (y/n) "; 
     cin >> con; 
     con[0] = tolower(con[0]); 
     if (con.compare("n") != 0) { 
      string name; 
      ofstream one; 
      one.open("Name.txt"); 
      cout << "What's your name? "; 
      cin >> name; 
      one << name; 
      one.close(); 
      cout << "See you later " << name << "."; 
      Sleep(4000); 
     } 
    } 
    else { 
     cout << "Welcome back " << line << "."; 
     example.close(); 
     Sleep(4000); 
    } 
} 

編輯:我才意識到我說:「來跟蹤用戶的」笑我現在知道爲什麼你們認爲我想做一些不好用此程序。我現在糾正了它,我的意思是「跟蹤用戶的姓名」。

+2

*「這意味着用戶可以查看它,修改等...「*爲什麼會出現這樣的問題? –

+2

是你的電腦還是用戶的? –

+0

不,我不想用它做任何事情,它只是它對我來說很愚蠢。嚴肅的軟件不會顯示廢話,它不是用戶友好的,我希望保持程序緊湊,在一個exe –

回答

1

據我所知,你想維護一個文件,其中包含所有註冊用戶的名稱,或一些其他類型的當前用戶無關的數據。

問題

你的代碼試圖在程序的當前工作目錄中打開該文件。不幸的是,這取決於用戶啓動程序的方式。

它也忽略了在閱讀文件時打開時可能出現的錯誤。所以如果文件不在那裏,你的代碼將會打開文件ofstream進行寫入(如果文件不存在,將會創建該文件)。

如何解決?

爲了滿足您的要求,您應該在預定位置打開文件(例如在安裝過程中或在程序配置中修復)。請參閱this article,瞭解如何在Windows平臺上理想地存儲數據和配置文件。

如果你想確保該程序只打開該文件,如果它已經存在,你應該驗證openifstream的結果,併發出錯誤信息,如果這個失敗:

example.open("Name.txt"); 
if (!example) { 
    cout << "OUCH ! Fatal error: the registration file couldn't be opened !" <<endl; 
    exit (1);  
} 

如何保護文件免受用戶侵害?

但請注意,如果您的程序從文件讀取和寫入數據,用戶也可以找到它並手動編輯它。這將很難防止。

或者,您可以考慮使用窗口registry,這對用戶來說編輯起來並不重要(雖然不是不可能)。這種方法的主要不便之處在於它依賴於系統,並且會使您的代碼移植到其他平臺變得更加困難。

如果你想完全保護你的文件,你可以按照Chris的建議在註釋中加密文件。加密是複雜的業務;考慮使用庫如opensslproven algorithm

這將保護你免受普通用戶的侵害。但是您仍然可以看到黑客能夠對您的代碼進行反向工程,並找到必須以某種方式嵌入代碼中以解密文件的加密密鑰。

+0

結束時無法刪除感謝您的幫助,但「嚴肅的計劃」如何應對這一問題?另外,如果程序不存在,我還可以創建該文件,但正如我所說我不希望用戶能夠查看該文件,打開它,刪除它,修改它並等等等等。等等,如果這不是一個方便的方法,那是什麼? –

+1

爲什麼不加密內容並添加校驗和。它不是隱藏的但不可讀,校驗和會證明它沒有被修改。 – chris01

+0

@chris謝謝,我會檢查怎麼做,因爲我對加密沒有任何線索。 –

相關問題