2015-03-02 63 views
0

我想在C++中製作一個簡單的文本文件壓縮器和解壓縮器。 所以我的壓縮程序接受參數從用戶在cmd中以這樣的方式C++訪問多個文件只有一個路徑已知

compress abc.txt 

現在它是什麼,創建一個壓縮文件,abc.cmp和隱藏的信息文件,info.cmp

解壓縮時,假定這兩個文件都在同一個目錄中。

現在我的問題是:如果文件abc.cmp與我的decompress.exe不在同一個目錄中,用戶應該給出abc.cmp的路徑,但是如何使用該路徑訪問info.cmp

例如用戶將只能TPE:

decompress C:/abc.cmp 

我的程序需要訪問信息文件很好,但用戶不應該提供路徑

void readInfoFile(string &line, int &n, int &k, unsigned char * &cstream, int &count) 
{ 
    ifstream fin("info.cmp"); 

    if (fin.is_open()) 
    { 
     for (int i = 0; !fin.eof(); i++) 
     { 
      if (i == 0) 
       fin >> n; 
      else if (i == 1) 
       fin >> k; 
      else 
      { 
       getline(fin, line, '\0'); 
      } 
     } 
     fin.close(); 
    } 
    for (int j = 1; line[j] != '\0'; j++) 
    { 
     line[j - 1] = line[j]; 
    } 
    count = ceil((float)(((float)(k))/8)); 
    cstream = new unsigned char[count](); 
} 


    void compressedFileStore(unsigned char * &readingArray, int count, char*argv[]) 
{ 
    ifstream fin(argv[1], ios::in|ios::binary); 
    fin.read((char*)readingArray, count); 
    readingArray[count] = '\0'; 
    fin.close(); 
} 

回答

0

文件名不能包含/,所以你知道最後的/之後的任何內容都是文件名,因此,最後的/之前的任何內容都是文件路徑。

您可以使用正則表達式或其他方法來獲取作爲路徑的子字符串,將「info.cmp」附加到最後,並將其用作完整路徑。