Как сохранить файл, не запрашивая у пользователя имя / путь? - PullRequest
0 голосов
/ 04 февраля 2011

Я пытаюсь открыть поток для файла.

Сначала мне нужно сохранить файл на рабочем столе, а затем открыть поток для этого файла.

Этот код хорошо работает(из моего предыдущего проекта), но в этом случае я не хочу предлагать пользователю выбрать место сохранения или даже имя файла.Просто сохраните его и откройте поток:

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 ]

4 голосов
/ 04 февраля 2011

Используйте 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);
}
0 голосов
/ 04 февраля 2011

Если это локальное (например, Windows / консольное) приложение, просто укажите stream a FileStream по любому желаемому пути (отметьте this для получения информации о том, как получить путь к папке на рабочем столе),Если у пользователя, запускающего приложение, есть права на запись в этот файл, он будет создан / сохранен там.

Если это веб-приложение (например, ASP.Net), вы не сможете сохранить файл непосредственно вклиентский компьютер без запроса пользователя (по соображениям безопасности).

0 голосов
/ 04 февраля 2011
// 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) { ... }

EDIT

Несмотря на то, что я жестко запрограммировал путь выше, вы не должны этого делать, используйте что-то вроде этого, чтобы получить путь к вашему рабочему столу:

Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
0 голосов
/ 04 февраля 2011

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

Ваш FileMode может отличаться в зависимости от того, что вы пытаетесь сделать.Также я бы не советовал использовать Desktop для этого, но это то, что вы просили в этом вопросе.Желательно заглянуть в изолированное хранилище .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...