文件流重命名文件

Filestream renaming file

我正在尝试将文件作为文件流读取,重命名文件,并将文件以文件流的形式发送到文档管理系统 (DMS)。

我在 Whosebug 中看到很多关于在 c# 中重命名文件的问题,大多数回复建议使用 File.Move。

但是,我想知道如果不想实际重命名文件,我想在文件成为文件流后重命名为文件。我想探索 File.Move 以外的替代解决方案。

我尝试通过以下方法重命名文件,但是,文件流对象的名称属性似乎是只读的。

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

附加信息:

是的,我现在正在尝试修改一些没有适当文档的遗留代码,其中代码显然表明 DMS 库有一个参数可以将文件流对象传递给它并上传。因此,我假设 DMS 确实读取了文件流的名称 属性。

之所以要直接改文件流的名字,是因为写这段代码的人已经走了,而且我也没有DMS的文档,所以我想尽量改。 .另外,文件上传完成后会被保存,这也是我不想改文件名的原因。

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

但是在听了大家的建议后,我认为解决这个问题最安全的方法是:

  1. 创建文件副本
  2. 重命名文件副本
  3. 上传文件的文件流
  4. 删除文件

如果您的文档管理系统(显然是 DMS)正在使用 FileStream.Name Property(至少可以说这看起来很奇怪),那您就不走运了,这无法(轻易)更改。

  • 您将必须查看是否有覆盖以在您的 DMS 调用中获取文件名
  • 或者在打开之前重命名它

例如

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

或者因为这是Whosebug,你可以用反射设置名字

注意 :我不推荐这个,这可能会随着 .net 的未来版本而改变,谁知道你会遇到什么问题,但确实如此努力更改名称 属性

// 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");