我正在尝试打开一个文件流。
首先,我需要将文件保存到桌面,然后打开该文件的流。
此代码运行良好(来自我之前的项目),但在这种情况下,我不想提示用户选择保存位置甚至文件名。只需保存并打开流:
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);
}
}
}
}
答案 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。