如何在C#中为用户提供一个将文件保存在所需位置的选项
本文关键字:保存 文件 一个 存在 选项 位置 用户 | 更新日期: 2023-09-27 18:21:16
我知道如何在C#控制台应用程序中创建和保存文件,但如果我希望用户选择保存文件的位置,该怎么办?我不知道怎样才能做到这一点。
edit-ive意识到,很难输入用户想要保存文件的位置。但是,是否可以像创建windows word文档时那样保存文件,这样用户就可以看到他们想要将文件保存在哪里。示例
如果您想要一个完整的控制台应用程序,即没有创建窗口,那么只有一件合适的事情要做:要求用户在命令行上指定保存位置。*
考虑到您有一个控制台应用程序,您可能已经对命令行进行了一些检查,但如果没有,那么命令行可以从args
参数读取到Program.Main
:
static void Main(string[] args)
{
...
}
如果你遇到问题,互联网上有一些例子可以处理命令行,或者可以专门针对你遇到的问题提出新的问题。
*)现在,为什么这是唯一正确的方式:
如果用户需要在命令行上传递它,那么用户就可以使用所有常见的细节,例如制表符完成。用户也可以在调用程序之前使用dir
和cd
来查找正确的目录。
另一方面,如果您要求用户输入它,那么用户将不完成制表符,将不能使用dir
或cd
,因此必须手动键入它。打字错误几乎是可以保证的。
从用户体验的角度来看,这是非常令人讨厌的。因此,程序员不应要求用户在程序执行期间手动键入文件路径。因此,必须在命令行中指定。
阅读SaveFileDialog
private void button1_Click(object sender, System.EventArgs e)
{
Stream myStream ;
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
saveFileDialog1.FilterIndex = 2 ;
saveFileDialog1.RestoreDirectory = true ;
if(saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if((myStream = saveFileDialog1.OpenFile()) != null)
{
// Code to write the stream goes here.
myStream.Close();
}
}
}
并准备好测试来自msdn示例的示例
如果你想玩>cd(ChDir)之类的东西,那么看看
Environment.CurrentDirectory
或者/并强迫用户通过himselft编写好的目录,并使用@Carl aswere:)但请记住,我们在21世纪离开时,人们都是懒惰的
您可以像Taumantis所说的那样使用SaveFileDialog,但您必须添加
System.Windows.Froms
命名空间,并且必须将主方法标记为单个单元线程
class Program
{
[STAThread]
static void Main(string[] args)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
}
Console.ReadKey();
}
这并不难。您需要一个控制台来使用string path = Console.ReadLine();
读取用户的输入。用户将输入首选路径,并将其存储到path
变量中。现在您应该检查该路径是否退出if(Directory.Exists(path))
,如果路径存在则返回true,如果路径不存在则返回false。
代码示例:
Console.WriteLine("Insert a path: ");
string path = Console.ReadLine();
if(Directory.Exists(path)){
//save logic
}
else{
//path does not exist handler
}
注意:如果要访问Directory类,则应使用System.IO
命名空间。