SaveFileDialog – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

SaveFileDialog – C / C++ – Fórum – Programujte.comSaveFileDialog – C / C++ – Fórum – Programujte.com

 

Tomáš Stejskal
~ Anonymní uživatel
8 příspěvků
8. 5. 2013   #1
-
0
-

Zdravím,

Potřeboval bych pomoc, Mám ve Visual Studiu 2010 program (Windows Form aplication) a potřebuju aby po stisku tlačítka došlo k vyvolání "SaveFileDialog" a pak pomocí něj uložit textový soubor podle zadaného jména a cesty. Zkoušel jsem hodně možností, ale vždy to skočilo chybou. Vytvořit ten "SaveFileDialog" bych svedl, ale nevím pomocí čeho uložit ten textový soubor do zadaného umístění a zadaného jména.

Postupoval jsem podle tohodle příkladu: http://www.daniweb.com/software-development/cpp/threads/236036/c-and-savefiledialog

Děkuji předem za odpovědi.

Nahlásit jako SPAM
IP: 2001:67c:1220:c1b1:5989:2...–
Doomista+1
Stálý člen
8. 5. 2013   #2
-
0
-

v C++ bych doporučil knihovnu <fstream> a objekt std::ofstream

Ukládání pak vypadá následovně:

#include <fstream>

using namespace std;

char path[20]={0};
char text[100]={0};
ofstream Save;

int main(){
cout << "Zadejte nazev souboru: "; //cesta k souboru je relativní vůči .exe souboru
cin.getline(path,20);
cin.clear();
cout << "Zadejte retezec pro ulozeni: ";
cin.getline(text,100);
cin.clear();
Save.open(path);
Save << text << "\n"; //pracovat s tím jde identicky jak s objektem cout
Save.close();
cout << "Text byl ulozen.";
cin.get();
return 0;
}

snad to pomůže ;)

Nahlásit jako SPAM
IP: 90.176.176.–
Na vše stačí iostream...
ingiraxo+15
Grafoman
8. 5. 2013   #3
-
0
-

a jen tak btw tohle patří do .NET a krom toho ten tutoriál je trochu sprasenej (např. používá std::string místo String^)

jinak takto nějak by to mělo být (v události kliknutí)

String^ text = "Hello World!";

SaveFileDialog^ dialog = gcnew SaveFileDialog();
dialog->Title = "Uložit soubor jako";
dialog->FileName = "soubor.txt";
dialog->Filter = "TXT (*.txt)|.txt";

if (dialog->ShowDialog() == DialogResult::OK)
{
    StreamWriter^ sw = gcnew StreamWriter(dialog->OpenFile());
    sw->WriteLine(text);
    sw->Close();
    delete sw;
}
delete dialog;
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tomáš Stejskal
~ Anonymní uživatel
8 příspěvků
8. 5. 2013   #4
-
0
-

#3 ingiraxo

 Tak to mi nejede, skončí to chybama.....

1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3737): error C2039: 'OK' : is not a member of 'System::Windows::Forms::Form::DialogResult'
1>          d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(176) : see declaration of 'System::Windows::Forms::Form::DialogResult'
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3737): error C2065: 'OK' : undeclared identifier
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3739): error C2065: 'StreamWriter' : undeclared identifier
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3739): error C2065: 'sw' : undeclared identifier
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3739): error C2061: syntax error : identifier 'StreamWriter'
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3740): error C2065: 'sw' : undeclared identifier
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3740): error C2227: left of '->WriteLine' must point to class/struct/union/generic type
1>          type is ''unknown-type''
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3741): error C2065: 'sw' : undeclared identifier
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3741): error C2227: left of '->Close' must point to class/struct/union/generic type
1>          type is ''unknown-type''
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3742): error C2065: 'sw' : undeclared identifier
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3742): error C2541: 'delete' : cannot delete objects that are not pointers
1>
1>Build FAILED.
Nahlásit jako SPAM
IP: 2001:67c:1220:c1b1:5989:2...–
ingiraxo+15
Grafoman
8. 5. 2013   #5
-
0
-

#4 Tomáš Stejskal
musíš si přidas prostory 



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

a reference jestli nemáš, ale ty by si měl mít ve Formu

a pokud chceš dělat C++, tak dělej čistý C++, na tohle co děláš je lepší C#

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tomáš Stejskal
~ Anonymní uživatel
8 příspěvků
8. 5. 2013   #6
-
0
-

#5 ingiraxo
Dík to pomohlo, ale pořád to nezná tu proměnou "OK"

1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3740): error C2039: 'OK' : is not a member of 'System::Windows::Forms::Form::DialogResult'
1>          d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(179) : see declaration of 'System::Windows::Forms::Form::DialogResult'
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3740): error C2065: 'OK' : undeclared identifier
Nahlásit jako SPAM
IP: 2001:67c:1220:c1b1:5989:2...–
ingiraxo+15
Grafoman
8. 5. 2013   #7
-
0
-

#6 Tomáš Stejskal
divný... zkus 

::DialogResult::OK

když to nepude tak pošli celý jak to máš

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tomáš Stejskal
~ Anonymní uživatel
8 příspěvků
8. 5. 2013   #8
-
0
-

#7 ingiraxo

Už to jde, díky. Mohl bych se ještě zeptat, jde z toho nějak získat kompletní cesta k tomu vytvářenýmu souboru ?

Nahlásit jako SPAM
IP: 2001:67c:1220:c1b1:5989:2...–
ingiraxo+15
Grafoman
8. 5. 2013   #9
-
0
-

#8 Tomáš Stejskal
to je právě ten: dialog->FileName (až v tý podmínce si to zavolej)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tomáš Stejskal
~ Anonymní uživatel
8 příspěvků
8. 5. 2013   #10
-
0
-

#9 ingiraxo

Tu cestu sem si uložil do proměnný, ale když jí chci pak použít, tak nastane chyba, že ta proměnná neexistuje.

Pozn.: v poslední části kódu ji převádím do char* kvůli jedné funkci (vstupem je jí jen char*)

String^ text = "Hello World!";

			 SaveFileDialog^ dialog = gcnew SaveFileDialog();
			 dialog->Title = "Save custom noise file";
			 dialog->FileName = "_cst.enc";
			 dialog->Filter = "Custom noise file(*.enc)|*.enc";

			 if (dialog->ShowDialog() == ::DialogResult::OK)
			 {
				 String^ path = dialog->FileName;
				 StreamWriter^ sw = gcnew StreamWriter(dialog->OpenFile());
				 sw->WriteLine(text);
				 sw->Close();
				 delete sw;
				 
			 }
			 delete dialog;


                         // zde to hlásí chybe, že path není deklarována
			 char * path2 = new char[path.size() + 1];
			 std::copy(path.begin(), path.end(), path2);
			 path2[path.size()] = '\0'; // don't forget the terminating 0

a výpis chyb je zde:

1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3757): error C2065: 'path' : undeclared identifier
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3757): error C2228: left of '.size' must have class/struct/union
1>          type is ''unknown-type''
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3758): error C2065: 'path' : undeclared identifier
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3758): error C2228: left of '.begin' must have class/struct/union
1>          type is ''unknown-type''
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3758): error C2065: 'path' : undeclared identifier
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3758): error C2228: left of '.end' must have class/struct/union
1>          type is ''unknown-type''
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3759): error C2065: 'path' : undeclared identifier
1>d:\microsoft visual studio 2010\dls-5800_software\dls-5800_software\Form1.h(3759): error C2228: left of '.size' must have class/struct/union
1>          type is ''unknown-type''
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.51
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Nahlásit jako SPAM
IP: 2001:67c:1220:c1b1:5989:2...–
ingiraxo+15
Grafoman
8. 5. 2013   #11
-
0
-

#10 Tomáš Stejskal
stále nechápeš, že tohle není čistý C++, tady nemůžeš míchat klasickej char* když je tady Char^

ale jinak je to 



char* nchar = (char *)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(path).ToPointer();

samozžejmě to pak musíš uvolnit přes 

System::Runtime::InteropServices::Marshal::FreeHGlobal(nchar);

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
fox
~ Anonymní uživatel
10 příspěvků
28. 1. 2016   #12
-
0
-

ingiraxo, Thanks. I am thankful you. You helped me.

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 141.0.12.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 72 hostů

Podobná vlákna

SaveFileDialog v C# — založil 666

SaveFileDialog u textBoxu — založil matesz

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý