c# saving a text in a specific directory - c#

Here is my code;
private void button1_Click(object sender, EventArgs e)
{
string newFile =textBox1.Text;
string temp = newFile.Replace("YNATEST.", "");
SaveFileDialog a1 = new SaveFileDialog();
a1.FileName = "";
a1.Filter = "Text Files(*txt)|*.txt";
a1.DefaultExt = "txt";
a1.ShowDialog();
StreamWriter yazmaislemi = new StreamWriter(a1.FileName);
yazmaislemi.WriteLine(temp);
yazmaislemi.Close();
}
it is saving the text on Desktop but i want to save it to the following path:
C:\Users\esra.ur\Desktop\projee1

use save file dialog, so you can save your text in your specific directory
using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApplication30
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// When user clicks button, show the dialog.
saveFileDialog1.ShowDialog();
}
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
// Get file name.
string name = saveFileDialog1.FileName;
// Write to the file name selected.
// ... You can write the text from a TextBox instead of a string literal.
File.WriteAllText(name, "test");
}
}
}
this code snippets is from this link http://www.dotnetperls.com/savefiledialog
I hope it will help

1) Wrap your show dialog to check the result.
if(a1.ShowDialog() == DialogResult.OK)
2) The SaveFileDialog has a property for setting an initial path. This is for the directory which will be shown when the dialog is first open. For the desktop you want to use the Environment.GetFolderPath like so.
a1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
3) Try to separate concerns:
private string OutputFile {get;set;}
private void button1_Click(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(this.OutputPath))
{
SaveFileDialog a1 = new SaveFileDialog();
a1.FileName = textBox1.Text;
a1.Filter = "Text Files(*txt)|*.txt";
a1.DefaultExt = "txt";
a1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
if(a1.ShowDialog() == DialogResult.OK)
{
this.OutputFile = ai.FileName
}
}
this.SaveFile(this.OutputFile);
}
private void SaveFile(string FileName)
{
string newFile = FileName;
string temp = newFile.Replace("YNATEST.", "");
using(StreamWriter yazmaislemi = new StreamWriter(temp))
{
yazmaislemi.WriteLine(temp);
yazmaislemi.Close();
}
}

The SaveFileDialog object has a property called InitialDirectory, which is a string you can specify, for example
SaveFileDialog a1 = new SaveFileDialog();
a1.InitialDirectory = #"C:\Users\esra.ur\Desktop\projee1";
If this directory doesn't exist, it will default back to documents. Be careful about writing a file even if the user tries to cancel. Hope this helps?
In response to your comment, it sounds like you want to hard code the destination file name. This is dangerous as you can get an exception if the directory doesn't exist, but you can use the following: (I'm not sure what you want to do with the file name)
'string newFile = textBox1.Text;
string temp = newFile.Replace("YNATEST.", "");
StreamWriter yazmaislemi = new StreamWriter(#"C:\Users\esra.ur\Desktop\projee1\" + temp + ".txt");
yazmaislemi.WriteLine(temp);
yazmaislemi.Close();
In this case you don't need the SaveFileDialog at all. I think this is what you're asking for, but it's dangerous to code in this way.

Related

C# WinForms how to use a non-static string from one void to another?

As a small beginner-ish project i'm making a simple program that can play .wav files, I've encountered an issue however where in stuck in a situation where the program gets the file path and name from one void but I need to use that string in another void, example code here:
public void ChooseFile_Click(object sender, EventArgs e)
{
OpenFile.InitialDirectory = #"C:\";
OpenFile.RestoreDirectory = true;
OpenFile.FileName = "";
OpenFile.Title = "Open .wav file";
OpenFile.Filter = "wav files (*.wav)|*.wav";
OpenFile.ShowDialog();
string fileName = OpenFile.FileName;
ChosenFileText.Text = fileName;
}
public void PlayButton_Click(object sender, EventArgs e)
{
SoundPlayer sound = new SoundPlayer(fileName);
sound.Play();
}
As you can see I need to use the fileName string with the SoundPlayer but currently I get the error:
"The name 'fileName' does not exist in the current context".
I've tried making it public and static but all I get is errors, does anyone know how I can work around this?
You have to define the variable inside the class so that everyone can access it.
string fileName="";
public void ChooseFile_Click(object sender, EventArgs e)
{
OpenFile.InitialDirectory = #"C:\";
OpenFile.RestoreDirectory = true;
OpenFile.FileName = "";
OpenFile.Title = "Open .wav file";
OpenFile.Filter = "wav files (*.wav)|*.wav";
OpenFile.ShowDialog();
fileName = OpenFile.FileName;
ChosenFileText.Text = fileName;
}
public void PlayButton_Click(object sender, EventArgs e)
{
SoundPlayer sound = new SoundPlayer(fileName);
sound.Play();
}

Application freezes when I open a file dialog

I want it so that when the user clicks on the button and opens an image, the image gets copied to another location and the filepath of the copied image is saved inside 'Properties.Settings.Default.custombgfilepath'
Here is my code:
private void Button2_Click(object sender, EventArgs e)
{
//check for openfile dialog result
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
textBox1.Text = openFileDialog1.FileName;
//initialize destination
string destination = #"C:\Launchicity\";
//Get filename
string filename = Path.GetFileName(openFileDialog1.FileName);
//get filepath
string filepath = destination + filename;
if (!File.Exists(filepath))
{
File.Copy(openFileDialog1.FileName, filepath);
Properties.Settings.Default.custombgfilepath = filepath;
Properties.Settings.Default.Save();
}
else
{
Properties.Settings.Default.custombgfilepath = filepath;
Properties.Settings.Default.Save();
}
}
}
Here is the Windows Form Designer auto genertaed code for openfiledialog1:
//
// openFileDialog1
//
this.openFileDialog1.Filter = "\"PNG (*.png)|*.png|JPG (*.jpg)|*.jpg\"";
this.openFileDialog1.Title = "Browse Image";
this.openFileDialog1.FileOk += new System.ComponentModel.CancelEventHandler(this.OpenFileDialog1_FileOk);
When I click on the button however, the application freezes.
Can you please help me?
Thanks
More questions talk to me. Pls send me feedback ;) try this:
(Edited)
using system.IO
private void button1_Click(object sender, EventArgs e)
{
//check for openfile dialog result
this.openFileDialog1.Filter = "\"PNG (*.png)|*.png|JPG (*.jpg)|*.jpg\"";
this.openFileDialog1.Title = "Browse Image";
openFileDialog1.ShowDialog();
}
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
textBox1.Text = openFileDialog1.FileName;
//initialize destination
string destination = #"C:\Launchicity\";
//Get filename
string filename = Path.GetFileName(openFileDialog1.FileName);
//get filepath
string filepath = destination + filename;
if (!File.Exists(filepath))
{
File.Copy(openFileDialog1.FileName, filepath);
//Properties.Settings.Default.custombgfilepath = filepath; i dont have custombgfilepath
Properties.Settings.Default.Save();
}
else
{
//Properties.Settings.Default.custombgfilepath = filepath; i dont have custombgfilepath
Properties.Settings.Default.Save();
}
}

Open an existing text file in WPF and C#

I have a program that enables a user to search text files in an open file dialog. The user is then able to open an existing text file they choose and edit it. However, my problem is that when they file opens it appears blank. What am I missing?
private void Open_Click(object sender, RoutedEventArgs e)
{
TextBox openText = new TextBox();
var OpenFile = new Microsoft.Win32.OpenFileDialog();
Nullable<bool> Success = OpenFile.ShowDialog();
OpenFile.DefaultExt = ".txt";
OpenFile.Filter = "Text documents (.txt)|*.txt";
if (Success.HasValue && Success.Value)
{
openText.Text = OpenFile.FileName;
}
else
{
//cannot open file
}
}
Replace this:
openText.Text = OpenFile.FileName;
with this:
openText.Text = System.IO.File.ReadAllText(OpenFile.FileName);
Use File.ReadAllText()
openText.Text = File.ReadAllText(OpenFile.FileName);

Trying to save file without using SaveFileDialog

I am creating a text editor and i am stuck on the SaveFileDialog window opening
and asking to overwrite the current file open.
I have seen all the similar questions asked like this on SO but none have been able to help me. I have even tried the code from this question: "Saving file without dialog" Saving file without dialog
I got stuck on my program having a problem with FileName.
Here is the code i have currently
namespace Text_Editor
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Clear();
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Text Files (.txt)|*.txt|All Files (*.*)|*.*";
open.Title = "Open File";
open.FileName = "";
if (open.ShowDialog() == DialogResult.OK)
{
this.Text = string.Format("{0}", Path.GetFileNameWithoutExtension(open.FileName));
StreamReader reader = new StreamReader(open.FileName);
richTextBox1.Text = reader.ReadToEnd();
reader.Close();
}
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog save = new SaveFileDialog();
save.Filter = "Text Files (.txt)|*.txt|All Files (*.*)|*.*";
save.Title = "Save File";
save.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
if (save.ShowDialog() == DialogResult.OK)
{
StreamWriter writer = new StreamWriter(save.FileName);
writer.Write(richTextBox1.Text);
writer.Close();
}
}
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog saving = new SaveFileDialog();
saving.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
saving.Filter = "Text Files (.txt)|*.txt|All Files (*.*)|*.*";
saving.Title = "Save As";
saving.FileName = "Untitled";
if (saving.ShowDialog() == DialogResult.OK)
{
StreamWriter writing = new StreamWriter(saving.FileName);
writing.Write(richTextBox1.Text);
writing.Close();
}
}
}
}
So my question is how can i modify my code so that i can save a file currently open without having the SaveFileDialog box opening everytime?
I do understand that it has something to do with the fact that i'm calling .ShowDialog but i don't know how to modify it.
When opening the file, save the FileName in a form-level variable or property.
Now while saving the file, you can use this FileName instead of getting it from a FileOpenDialog.
First declare a variable to hold filename at form level
// declare at form level
private string FileName = string.Empty;
When opening a file, save the FileName in this variable
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Text Files (.txt)|*.txt|All Files (*.*)|*.*";
open.Title = "Open File";
open.FileName = "";
if (open.ShowDialog() == DialogResult.OK)
{
// save the opened FileName in our variable
this.FileName = open.FileName;
this.Text = string.Format("{0}", Path.GetFileNameWithoutExtension(open.FileName));
StreamReader reader = new StreamReader(open.FileName);
richTextBox1.Text = reader.ReadToEnd();
reader.Close();
}
}
And when doing SaveAs operation, update this variable
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog saving = new SaveFileDialog();
saving.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
saving.Filter = "Text Files (.txt)|*.txt|All Files (*.*)|*.*";
saving.Title = "Save As";
saving.FileName = "Untitled";
if (saving.ShowDialog() == DialogResult.OK)
{
// save the new FileName in our variable
this.FileName = saving.FileName;
StreamWriter writing = new StreamWriter(saving.FileName);
writing.Write(richTextBox1.Text);
writing.Close();
}
}
The save function can then be modified like this:
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(this.FileName))
{
// call SaveAs
saveAsToolStripMenuItem_Click(sender, e);
} else {
// we already have the filename. we overwrite that file.
StreamWriter writer = new StreamWriter(this.FileName);
writer.Write(richTextBox1.Text);
writer.Close();
}
}
In the New (and Close) function, you should clear this variable
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
// clear the FileName
this.FileName = string.Empty;
richTextBox1.Clear();
}
Create a new string variable in your class for example
string filename = string.empty
and then
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(filename)) {
//Show Save filedialog
SaveFileDialog save = new SaveFileDialog();
save.Filter = "Text Files (.txt)|*.txt|All Files (*.*)|*.*";
save.Title = "Save File";
save.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
if (save.ShowDialog() == DialogResult.OK)
{
filename = save.FileName;
}
}
StreamWriter writer = new StreamWriter(filename);
writer.Write(richTextBox1.Text);
writer.Close();
}
The SaveFileDialog now only opens if fileName is null or empty
You will have to store the fact that you have already saved the file, e.g. by storing the file name in a member variable of the Form class you have. Then use an if to check whether you have already saved your file or not, and then either display the SaveFileDialog using ShowDialog() (in case you haven't) or don't and continue to save to the already defined file name (stored in your member variable).
Give it a try, do the following:
Define a string member variable, call it _fileName (private string _fileName; in your class)
In your saveToolStripMenuItem_Click method, check if it's null (if (null == _fileName))
If it is null, continue as before (show dialog), and after getting the file name, store it in your member variable
Refactor your file writing code so that you either get the file name from the file dialog (like before), or from your member variable _fileName
Have fun, C# is a great language to program in.
First, extract method from saveAsToolStripMenuItem_Click: what if you want add up a popup menu, speed button? Then just implement
public partial class Form1: Form {
// File name to save text to
private String m_FileName = "";
private Boolean SaveText(Boolean showDialog) {
// If file name is not assigned or dialog explictly required
if (String.IsNullOrEmpty(m_FileName) || showDialog) {
// Wrap IDisposable into using
using (SaveFileDialog dlg = new SaveFileDialog()) {
dlg.Filter = "Text Files (.txt)|*.txt|All Files (*.*)|*.*";
dlg.Title = "Save File";
dlg.FileName = m_FileName;
if (dlg.ShowDialog() != DialogResult.OK)
return false;
m_FileName = dlg.FileName;
}
}
File.WriteAllText(m_FileName, richTextBox1.Text);
this.Text = Path.GetFileNameWithoutExtension(m_FileName);
return true;
}
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) {
// SaveAs: always show the dialog
SaveText(true);
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e) {
// Save: show the dialog when required only
SaveText(false);
}
...
}

OpenFileDialog Control - How Can I Grab the Selected Path and Show it in a Text Box?

Here is my snippet:
private void btnBrowseCInv_Click(object sender, EventArgs e)
{
ofdBrowseVInv.Title = "Locate Customer Invoice File";
ofdBrowseVInv.Filter = "Portable Document Format (*.pdf)|*.pdf|All Files (*.*)|*.*";
ofdBrowseVInv.FileName = "";
ofdBrowseVInv.FilterIndex = 0;
ofdBrowseVInv.InitialDirectory = "";
ofdBrowseVInv.CheckFileExists = true;
ofdBrowseVInv.CheckPathExists = true;
if (ofdBrowseVInv.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
//txtInvoicePathCInv.Text = ofdBrowseVInv... What property should i use?
}
}
As you see below, once a user pick a file and click open. I want the selected path to show on the pointed text box which is named "txtInvoicePathCInv". Any idea?
I'm using Windows Application...
alt text http://img708.imageshack.us/img708/54/99763211.jpg
Use the FileName property:
txtInvoicePathCInv.Text = ofdBrowseVInv.FileName;
This will give you the whole path, but you can always just use the directory part of it, using Path.GetDirectoryName:
txtInvoicePathCInv.Text = Path.GetDirectoryName(ofdBrowseVInv.FileName);
string filename = System.IO.Path.GetFileName(ofdBrowseVInv.FileName);
string path = System.IO.Path.GetDirectoryName(ofdBrowseVInv.FileName);

Categories

Resources