[Çözüldü] c++ Masaüstü yolu

Başlatan Ali Osman, 14 Mart 2016 - 12:52:07

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Ali Osman

Arkadaşlar:
Windows'ta c++ ile yaptığım bir program bir takım hesaplamalar yaptıktan sonra çalıştığı klasör hangisi olursa olsun sonucu masaüstünde bir metin belgesi oluşturup kaydediyor. Yani exe herhangi bir klasörde olabilir ama metin belgesini hep masaüstüne kaydediliyor. Programı ubuntuya taşıdım ancak bunu bir türlü yapamadım. Ubuntu'da masaüstü yolunu nasıl gösterebilirim? Herkese teşekkürler.

Reverser

yerel değişkenleri kullanarak yapabilirsin. Mesela windows üzerinde masaüstü yerel değişkeni %userprofile%/Desktop

XFCE ROCKS !
Powered by Thunar & XFWM4



Ali Osman

#2
Hocam denedim ubuntuda olmadı, Kod Şöyle:
    ofstream dosya;
    dosya.open("%userprofile%/Desktop/YazilanDosya",ios::out);
    dosya<<yazi;
    dosya.close();//

uçbirim2002

#3
...
Hello!

Ali Osman

Hocam gene olmadı:
Yukarıdaki kodda (dosya.open)'dan sonra nasıl kullanacağımı gösterebilir misiniz?

uçbirim2002

#5
...
Hello!

Amenofis

Pek sağlıklı bir yönteme benzemiyor. ü harfi sorun çıkarabilir, ya da masaüstü dizini başka bir dilde oluşturulmuş olabilir. 

Madem ki programınız birden fazla sistemde çalışacak o halde en iyisi çoklu platform destekleyen bir kütüphane ile işi halletmek. Akla ilk gelen kütüphane Qt. Sadece Core modülünü eklemeniz yeterli.

#include <QStandardPaths>
...
QString masaustu = QStandardPaths::displayName (QStandardPaths::DesktopLocation);

Ali Osman

Hocam bu defa da şöyle bir hata veriyor.
main.cpp:227: error: invalid operands of types 'char*' and 'const char [13]' to binary 'operator+'
char* masaustuYolu = getenv("HOME") + "/Masaüstü/";
                                           ^

uçbirim2002

#8
...
Hello!

Ali Osman

Hocam çok teşekkürler.
Çalıştı...

uçbirim2002

#10
...
Hello!

bugra9

Eğer dil problemini de aşmak ama kütüphane kullanmak istemiyorsan "~/.config/user-dirs.dirs" dosyasının içerisinde masaüstü, belgeler gibi özel klasörlerin konumları tanımlanmış. Bu dosyadan çekip kullanabilirsin. Gerçi bu dosya her dağıtımda var mı ve aynı isimde mi bilmiyorum, bakmak lazım.

Örnek kod;


#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string>

using namespace std;

string getUserDir(string i) {
ifstream infile((string(getenv("HOME")) + "/.config/user-dirs.dirs").c_str());
string a;
while (getline(infile, a))
if(a.compare(0,i.length() + 8,"XDG_"+i+"_DIR") == 0) {
string str = a.substr(i.length() + 10, a.length() - i.length() - 11);
size_t start_pos = str.find("$HOME");
if(start_pos != string::npos)
str.replace(start_pos, 5, getenv("HOME"));
return str;
}
return "";
}

int main()
{
string file = getUserDir("DESKTOP")+"/deneme.txt";
ofstream a_file(file.c_str());
a_file << "Deneme Yapıyorum";
return 0;
}


Buradaki getUserDir() fonksiyonunu "DESKTOP, DOWNLOAD, TEMPLATES, PUBLICSHARE, DOCUMENTS, MUSIC, PICTURES, VIDEOS" gibi parametrelerle kullanabilirsin.