文件流重命名文件
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();
但是在听了大家的建议后,我认为解决这个问题最安全的方法是:
- 创建文件副本
- 重命名文件副本
- 上传文件的文件流
- 删除文件
如果您的文档管理系统(显然是 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");
我正在尝试将文件作为文件流读取,重命名文件,并将文件以文件流的形式发送到文档管理系统 (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();
但是在听了大家的建议后,我认为解决这个问题最安全的方法是:
- 创建文件副本
- 重命名文件副本
- 上传文件的文件流
- 删除文件
如果您的文档管理系统(显然是 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");