Filestream переименовывает файл - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь прочитать файл как файловый поток, переименовать файл и отправить файл в виде файлового потока в Систему управления документами (DMS).

Я видел так много вопросов вStackOverflow запрашивает переименование файла в c #, и большая часть ответа предлагает использовать File.Move.

Однако мне было интересно, не хотите ли вы на самом деле переименовать файл, и я бы хотел переименовать файл один разфайл стал файловым потоком.Я хочу изучить альтернативное решение, отличное от File.Move.

Я попытался переименовать файл следующим способом, однако, похоже, что свойство name объекта filestream доступно только для чтения.

//This is my attempt
FileStream fs = new FileStream()
fs.Name = "new_name" //<-- not working

Дополнительная информация:

Да, сейчас я пытаюсь изменить какой-то устаревший код без надлежащей документации, где этот код явно указывает на то, что в библиотеке DMS есть параметр для передачи в него объекта файлового потока и его загрузки.Поэтому я предположил, что DMS читает свойство Name файлового потока.

Причина, по которой я хочу напрямую изменить имя файлового потока, заключается в том, что я хочу изменить, по крайней мере, насколько это возможно, поскольку тот, кто написал этот код, уже ушел, и у меня также нет документаDMS.Кроме того, документ будет сохранен после завершения загрузки, поэтому я не хочу менять название документа.

//This is how the actual program code looked like
FileStream input = File.OpenRead(uploadFile_path);
obj.Update();
obj.Fetch();

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

  1. Создать копию файла
  2. Переименовать копию файла
  3. Загрузить поток файлов из файла
  4. Удалить файл

1 Ответ

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

Если ваша система управления документами (очевидно, DMS) использует FileStream.Name Property (что кажется странным, если не сказать больше), вам не повезло, это нельзя изменить (легко).

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

Например

System.IO.File.Move("oldfilename", "newfilename");

Или, поскольку это стекопоток, вы можете задать имя с отражением

Примечание : я не рекомендую это, это может измениться в будущемверсии .net, и кто знает, какие проблемы у вас могут возникнуть, однако это действительно помогает изменить свойство Name

// some FileStream 
FileStream file = new FileStream(@"D:\test.txt", FileMode.Open);

var myField = file.GetType()
                  .GetField( "_fileName", BindingFlags.Instance | BindingFlags.NonPublic)

// set the name
myField.SetValue(file, "blah");
...