2017-07-24 4 views
-2
#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(); 
} 
} 

Ich versuche, eine Datei aus dem Papierkorb zu lesen, die weiter zwei Unterordner hat, die Informationen einer Meta-Daten für gelöschte Datei mit einer Erweiterung von .trashinfoLesen Sie eine trash-Datei von C++

Aber aufgrund einiger enthalten Grund, ich kann diese Datei in diesem Programm nicht öffnen.

[email protected]:~/projects/Linux-Commands/Restore# ./a.out hero 
~/.local/share/Trash/info/hero.trashinfo 
Not working 
[email protected]:~/projects/Linux-Commands/Restore# vi ~/.local/share/Trash/info/hero.trashinfo 

Mit diesem vi-Befehl kann ich es einfach im Terminal öffnen und sogar bearbeiten.

+0

'~' wird durch Shell erweitert und funktioniert nicht, wenn Sie es aus einem C++ - Programm tun. Bitte überprüfen Sie https://stackoverflow.com/questions/2910377/get-home-directory-in-linux-c – Kane

+0

~ kann nicht verwendet werden, um in diesem Kontext auf private Directorie des Benutzers verweisen. –

+0

Stimmt, dass ich heute etwas Neues gelernt habe. Vielen Dank. –

Antwort

2

~ können Sie nicht verwenden, um auf das Basisverzeichnis des Benutzers in einem C++ - Programm zu verweisen - dieses Zeichen wird um die Shell erweitert, nicht das Betriebssystem im Allgemeinen.

Sie sollten entweder einen absoluten Pfad angeben oder getenv wie gezeigt verwenden here.

Eine einfachere Lösung besteht darin, nur den vollständigen Pfad zur Datei an Ihr Programm zu übergeben und sich nicht darum zu kümmern, sie in Ihrem Programm zu ändern (file_directory = argv[1], statt Ihrer aktuellen). Dann wird aus der Schale, können Sie

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

Typ und die Schale wird ~ erweitern, wie Sie es erwarten.

+0

Hilfe zum Zugriff auf diese Datei? –

+0

a.out ~/.local/share/Papierkorb/info/hero.trashinfo das ist der Trick, den ich bereit bin zu verwenden, wird der Benutzer nur den Dateinamen eingeben und es wird die Zeit geben, die es gelöscht wurde –

+0

Es hat funktioniert , Vielen Dank. –