文件流重命名文件

时间:2018-10-25 07:40:28

标签: c# file filestream

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

我在StackOverflow中看到了很多问题,询问如何在c#中重命名文件,并且大多数答复建议使用File.Move。

但是,我想知道是否不想实际重命名文件,并且一旦文件成为文件流,我想重命名为file。我想探索File.Move以外的替代解决方案。

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

//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 :(得分:2)

如果您的文档管理系统(显然是DMS)使用的是FileStream.Name Property(至少可以说很奇怪),那么您就走运了,那么就无法(轻松)进行更改。

  • 您将必须查看DMS调用中是否存在覆盖文件名的功能
  • 或在重命名之前将其打开

例如

php worker.php

或者因为这是stackoverflow,您可以使用反射设置名称

注意 :我不建议这样做,这可能会随.net的未来版本而改变,谁知道您可能遇到的问题,但是确实如此更改Name属性的工作

{
echo some information on the environment
echo some checks
# etc....
} 2>&1 | tee "logdir/logfile.log"    

{
rsync  -rtpgov /some/folder/ some/other/folder
} 2>&1 | tee "logdir/rsync.log"

{
tar -xf some/other/tar/file.tar  -C some/other/folder2
tar -xf some/other/tar/file.tar  -C some/other/folder3
tar -xf some/other/tar/file.tar  -C some/other/folder4
# etc...

echo  some finishing checks
} 2>&1 | tee -a "logdir/logfile.log"