2015-03-02 2 views
0

Я пытаюсь создать простой текстовый файл компрессора и декомпрессора в C++. Так что мой компресс программа принимает аргументы от пользователя в ЦМД таким образом:C++ доступ к нескольким файлам только с одним известным путем

compress abc.txt 

Теперь то, что он делает это, создает сжатый файл, abc.cmp и скрытый информационный файл, info.cmp.

При распаковке предполагается, что оба этих файла находятся в одном каталоге.

Теперь мой вопрос: если файл abc.cmp не находится в том же каталоге, что и мой файл dispress.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» в конец и использовать это как полный путь.