C # Изменить каталог загруженных файлов - PullRequest
0 голосов
/ 09 октября 2018

У меня есть следующий код, где он будет извлекать данные из stream и распечатывать их в текстовый файл, используя streamwriter и буферизированный писатель.По умолчанию он загружает файл в каталог папки загрузки на локальном компьютере.Проблема, с которой я сталкиваюсь сейчас, заключается в том, что я хотел бы изменить каталог загруженного файла на какой-то другой каталог, но я не смог этого добиться.Вместо этого я использую System.IO.File.WriteAllText для достижения этих целей, но это не то, что мне нужно, поскольку приведенный ниже код загрузит два файла, один в папку загрузки, а другой в папку документов.

protected override void AddPlainText(Stream outputStream)
{
    var records = GetData();
    var x = new StringBuilder();
    string stamp = DateTime.Now.ToString("dd-MM-yy_HH-mm-ss", CultureInfo.InvariantCulture);
    string fileName = "reportTxt_" + stamp + ".txt";
    string path = @"C://Users//***//Documents//";
    string path2 = @"C:\Users\***\Documents\";

    using (var stream = new BufferedStream(outputStream))
    {
        var writer = new StreamWriter(stream, Encoding.ASCII);

        foreach (var r in records)
        {
            x.AppendLine(r.ToFixedLengthString());
        }
        var output = x.ToString();
        writer.WriteLine(output);
        writer.Flush();

        //Create File
        System.IO.File.WriteAllText(path + fileName, output);

        //Calling Transfer Method
        SFTP_Connection(fileName, path2);

        //Delete file after transfer
        if (File.Exists(path + fileName))
        {
            File.Delete(path + fileName);
        }
    }
 }

Любые советы, советы и помощь помогутвысоко ценится.

1 Ответ

0 голосов
/ 09 октября 2018

Из вашего описания, я думаю, вы могли ошибочно предположить, что данные считаны из потока, фактически, во фрагменте кода, поток используется для записи в .

Сначала данные извлекаются из этого вызова

var records = GetData();

А затем данные преобразуются в строку, и строка записывается в BufferedStream с использованием StreamWriter,и, наконец, записано в outputStream.

(BufferedStream используется в качестве буфера - таким образом, имя 'BufferedStream' - для повышения производительности операции записи.)

Так что одна возможность состоит в том, что outputStreamFileStream, созданный вызывающим абонентом, и он создается в папке Downloads .

Если это так, вам не нужно передавать outputStream, фактически, не создавайте его в первую очередь!

После удаления ненужных потоков, этовсе, что вам нужно

var records = GetData();
var x = new StringBuilder();
string stamp = DateTime.Now.ToString("dd-MM-yy_HH-mm-ss", CultureInfo.InvariantCulture);
string fileName = "reportTxt_" + stamp + ".txt";
string path = @"C://Users//***//Documents//";
string path2 = @"C:\Users\***\Documents\";
foreach (var r in records)
{
    x.AppendLine(r.ToFixedLengthString());
}
//Create File
System.IO.File.WriteAllText(path + fileName, output);

//Calling Transfer Method
SFTP_Connection(fileName, path2);

//Delete file after transfer
if (File.Exists(path + fileName))
{
    File.Delete(path + fileName);
}

Другая возможность - вызов SFTP_Connection создает промежуточный файл в папке Downloads .Обязательно проверьте выполнение вызова.

Вам нужно войти в (F10 / F11) код, чтобы проверить, на какой строке создается нежелательный файл.

...