linux — чтение файла корзины из переполнения стека

#include <bits/stdc++.h>
using namespace std;

int main(int count, char* argv[])
{
if(count!=2)
{
// print_syntax(argv[0]);
}
else if(count==2)
{
string file_name=argv[1];
// cout<<file_name<<endl;
string file_directory="~/.local/share/Trash/info/"+file_name+".trashinfo";
cout<<file_directory<<endl;
ifstream myReadFile;
myReadFile.open(file_directory);
char output[100];
if (myReadFile.is_open())
{
cout<<"here";
while (!myReadFile.eof())
{myReadFile >> output;
cout<<output;}
}
else
{
cout<<"Not working";
}
myReadFile.close();
}
}

Я пытаюсь прочитать файл из корзины, который также имеет две подпапки, информационная содержит метаданные для удаленного файла с расширением .trashinfo

Но по какой-то причине я не могу открыть этот файл в этой программе.

root@kali:~/projects/Linux-Commands/Restore# ./a.out hero
~/.local/share/Trash/info/hero.trashinfo
Not working
root@kali:~/projects/Linux-Commands/Restore# vi ~/.local/share/Trash/info/hero.trashinfo

Используя эту команду vi, я могу легко открыть ее в терминале и даже отредактировать.

-1

Решение

Вы не можете использовать ~ для ссылки на домашний каталог пользователя в программе на C ++ — этот символ расширяется ракушка, не ОС в целом.

Вы должны либо указать абсолютный путь, либо использовать getenv как показано Вот.

Более легкое решение — просто передать полный путь к файлу вашей программе, и не беспокоиться об изменении его внутри вашей программы (file_directory = argv[1], а не ваш текущий). Затем из оболочки вы можете набрать

a.out "~/.local/share/Trash/info/hero.trashinfo"

и оболочка будет расширяться ~ как вы ожидаете. Кавычки должны гарантировать, что если в вашем пути есть пробелы, полный путь передается в виде одной строки, а не разделяется оболочкой на несколько аргументов.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]