如何在不提示用户输入名称/路径的情况下保存文件?

时间:2011-02-04 02:22:35

标签: c# winforms file io

我正在尝试打开一个文件流。

首先,我需要将文件保存到桌面,然后打开该文件的流。

此代码运行良好(来自我之前的项目),但在这种情况下,我不想提示用户选择保存位置甚至文件名。只需保存并打开流:

Stream myStream;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
    if ((myStream = saveFileDialog1.OpenFile()) != null)
    {
        PdfWriter.GetInstance(document, myStream);

这是我的新项目代码(这个问题的原因):

namespace Tutomentor.Reporting
{
    public class StudentList
    {
        public void PrintStudentList(int gradeParaleloID)
        {
            StudentRepository repo = new StudentRepository();
            var students = repo.FindAllStudents()
                               .Where(s => s.IDGradeParalelo == gradeParaleloID);

            Document document = new Document(PageSize.LETTER);
            Stream stream;

            PdfWriter.GetInstance(document, stream);
            document.Open();
            foreach (var student in students)
            {
                Paragraph p = new Paragraph();
                p.Content = student.Name;
                document.Add(p);
            }

        }
    }
}

4 个答案:

答案 0 :(得分:4)

使用Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)获取桌面目录。

string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),
                               "MyFile.pdf");
using(var stream = File.OpenWrite(fileName))
{
    PdfWriter.GetInstance(document, stream);
}

答案 1 :(得分:0)

如果这是本地(例如Windows /控制台)应用程序,只需将stream FileStream设置为您想要的任何路径(查看this以获取有关如何获取桌面文件夹的信息路径)。如果运行应用程序的用户对该文件有写入权限,则会在那里创建/保存。

如果这是一个Web(例如ASP.Net)应用程序,您将无法在不提示用户的情况下直接将文件保存在客户端计算机中(出于安全原因)。

答案 2 :(得分:0)

// However you initialize your instance of StudentList
StudentList myStudentList = ...;

using (FileStream stream = File.OpenWrite(@"C:\Users\me\Desktop\myDoc.pdf")) {
    try {
        myStudentList.PrintStudentList(stream, gradeParaleloID);
    }
    finally {
        stream.Close();
    }
}

您应该将流传递给您的方法:

public void PrintStudentList(Stream stream, int gradeParaleloID) { ... }

修改

即使我对上面的路径进行了硬编码,你也不应该这样做,使用类似这样的东西来获取桌面路径:

Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

答案 3 :(得分:-1)

Stream myStream = new FileStream(@"c:\Users\[user]\Desktop\myfile.dat", FileMode.OpenOrCreate);

您的FileMode可能会有所不同,具体取决于您尝试执行的操作。此外,我不建议实际使用桌面,但这就是你在问题中要求的。最好是查看Isolated Storage