C++ İle Dosya Açma (.exe, .pdf, ...)

guvejokua

Öğrenci
Katılım
24 Aralık 2016
Mesajlar
40
Reaksiyon puanı
6
Puanları
8
Konum
Дуней
C++ ile yazdığım bir programda comboBox tan seçilen seçeneklere göre farklı pdf veya exe dosyası çalıştırmam gerekiyor ancak system(""); komutu ile yapamadım. Daha doğrusu dosya uzantısını hatalı buluyor ancak ben direk windowstan yolu kopyala diyerek alıyorum ama geçersiz karakter diyor.
Yani herhangi bir dosya türünü okuma yazma yapmak için değil örneğin butona tıklayınca İçerik.pdf dosyasının açılmasını nasıl sağlarım?
 

kmurat

Müdavim
Müdavim
Katılım
8 Şubat 2014
Mesajlar
8,957
Çözümler
3
Reaksiyon puanı
3,902
Puanları
1,358
Her dosya uzantısını bir başka program çalıştırıyor. Meselâ Pdf dosyalarını "Adobe Reader" çalıştırıyor. Önce Adobe Reader'i başlatıp, Adobe reader ile istenilen Pdf dosyasını açtırmalısın. Exe uzantılı dosyaların bir kısmını da "start.exe" çalıştırıyor.
 

guvejokua

Öğrenci
Katılım
24 Aralık 2016
Mesajlar
40
Reaksiyon puanı
6
Puanları
8
Konum
Дуней
Her dosya uzantısını bir başka program çalıştırıyor. Meselâ Pdf dosyalarını "Adobe Reader" çalıştırıyor. Önce Adobe Reader'i başlatıp, Adobe reader ile istenilen Pdf dosyasını açtırmalısın. Exe uzantılı dosyaların bir kısmını da "start.exe" çalıştırıyor.
Ama komut istemine örneğin "dosyakonumu\İçerik.pdf" yazdığımızda bilgisayar otamatik olarak pdf için hangi varsayılan uygulama atanmışsa ona göre İçerik dosyasını açmıyor mu aynı şeyi C++ ile system("dosyakonum\İçerik.pdf"); şeklinde tanımladığımızda hem açılmıyor. Hemde geçersiz karakter diye uyarı veriyor.
Sağolun cevap için ayrıca
 

mirinkirin

Doçent
Katılım
4 Temmuz 2016
Mesajlar
708
Reaksiyon puanı
358
Puanları
63
Konum
Gitti
ShellExecute fonksiyonunun özelliklerini bir araştırın, Türkçe karakterden dolayı açmıyor olabilir.
Siz system ile deniyormuşsunuz sanırım, bir de ShellExecute ile deneyin.
 

errno

Doçent
Katılım
17 Temmuz 2016
Mesajlar
694
Reaksiyon puanı
567
Puanları
93
Konum
Münster
Merhaba,

Pdf dosyalarını açmak istiyorsan, örnek olsun diye senin için kısa bir programcık yazdım. (Aşağıdaki kodlar Visual Studio 2013 Pro ve Windows 10 üzerinde test edilmiştir ve çalıştırılmıştır.)

ilk olarak itextsharp.dll'i bu adresten indir.(iTextSharp, a .NET PDF library) İndirdiğin dosyayı projenin altında bir dosya açıp kopyala.

1- Visual Studio C++ menüsü altından "Win32 Project" seç ve "Empty Project" işaretleyerek finish yap.
2 - Projene sağ tuş >> Linker >> SubSystem >> "Windows (/SUBSYSTEM:WINDOWS)" olarak değiştir.
3- Projene sağ tuş >> Linker >> Advanced >> "main" yaz.
4- Projene sağ tuş >> Common Properties >> References >> Add New Reference >> Browse >> itextsharp.dll kütüphanesinin yerini göster.
5- Projene sağ tuş >> Add >> New Item >> UI >> "Windows Form" ekle.
6- Aşağıdaki kodları projendeki "Source Files" altına eklediğin cpp dosyasına yaz.

using namespace System;
using namespace System::Windows::Forms;

[STAThread]
void main(array<String^>^ args)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Application::Run(gcnew Project1::MyForm);
}

7- Projendeki "Header Files" dosyası altındaki formuna giderek bir adet label, bir adet textbox (textBox1), bir adet buton (button1) ve bir adet ListBox(listBox1) ekle.

görüntü aşağıdaki gibi olacaktır. (Untitled.png)

8- Aşağıdaki başlık dosyalarını eklediğin formun kod sayfasına yaz. Namespace'leride yaz.

#include <string>
#include <iostream>
#include <string>

using namespace iTextSharp::text:Pdf;
using namespace iTextSharp::text:Pdf:Parser;
using namespace std;

9- Aşağıdaki kodları button1'e çift tıkla ve event'inin içerisine yaz.

PdfReader ^reader = gcnew PdfReader(textBox1->Text);

for (int page = 1; page <= reader->NumberOfPages; page++)
{
ITextExtractionStrategy ^strategy = gcnew SimpleTextExtractionStrategy();
System::String ^cur = PdfTextExtractor::GetTextFromPage(reader, page, strategy);

cur = Encoding::UTF8->GetString(ASCIIEncoding::Convert(Encoding::default, Encoding::UTF8, Encoding::default->GetBytes(cur)));

listBox1->Items->Add(cur);
}

Programı çalıştırdığında textbox'a pdf dosyasının yolunu gir ve butona bas. Yanlış birşey yapmadıysan çalışacaktır. Exe dosyaları açmaktan kastın nedir onu biraz daha açarsan yardımcı olabilirim. Mesela herhangi bir exe dosyayı kend programın içerisinen mi açmak istiyorsun ? Neyse yazarsan bakarız.

Saygılarımla.
 

Ekli dosyalar

  • Untitled.png
    Untitled.png
    27.6 KB · Görüntüleme: 1,017

guvejokua

Öğrenci
Katılım
24 Aralık 2016
Mesajlar
40
Reaksiyon puanı
6
Puanları
8
Konum
Дуней
Sağolasın baya uğraşmışsın. Ama sanırım bu yazdığın metod pdf dosyasını List Box içinde gösteriyor. Ben normal olarak açmak istiyorum yani normalde pdf'ye çift tıklayınca nasıl açılıyorsa öyle açılsın aynen exe dosyasını da böyle yani programda bir butona basınca windowsun onu açması için komut vermesini istiyorum.
 

errno

Doçent
Katılım
17 Temmuz 2016
Mesajlar
694
Reaksiyon puanı
567
Puanları
93
Konum
Münster
Merhaba,

o kodları sadece sana fikir vermesi açısından yazmıştım. Listbox sadece kolay olduğu için forma atıp yazdım. Daha profesyonelce de yazılabilirdi tabii ki. Yazdığım saate bakarsan neden o kadar basitçe yardım etmek istediğimi anlarsın sanırım. 10 Dakika sonra da uyudum zaten :)

Saygılarımla.
 

guvejokua

Öğrenci
Katılım
24 Aralık 2016
Mesajlar
40
Reaksiyon puanı
6
Puanları
8
Konum
Дуней
Teşekkür ederim. Bu itextsharp ın hangi dosyasını seçeceğim orasını pek anlamadım. İçeresinde bir sürü dll var
 

errno

Doçent
Katılım
17 Temmuz 2016
Mesajlar
694
Reaksiyon puanı
567
Puanları
93
Konum
Münster
Merhaba,

ben itextsharp-dll-core (sürüm : itextsharp-all-5.5.8) dosyasını kullandım. Zaten taban araçlarıda orada.

Saygılarımla.
 
Üst