gpt4 book ai didi

c# - 文件流重命名文件

转载 作者:行者123 更新时间:2023-11-30 22:58:28 30 4
gpt4 key购买 nike

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

我在 StackOverflow 中看到很多关于在 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");

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

注意:我不推荐这样做,这可能会随着 .net 的 future 版本而改变,谁知道您可能会遇到什么问题,但确实如此努力改变 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");

关于c# - 文件流重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52983898/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com