C# 文件流重命名文件

C# 文件流重命名文件,c#,file,filestream,C#,File,Filestream,我试图将文件读取为filestream,重命名该文件,并将该文件以filestream的形式发送到文档管理系统(DMS) 我在StackOverflow中看到了很多关于在c#中重命名文件的问题,大多数回复建议使用file.Move 但是,我想知道我是否真的不想重命名该文件,我想在文件变成filestream后重命名为file。我想探索File.Move以外的其他解决方案 我尝试通过以下方法重命名文件,但是,filestream对象的name属性似乎是只读的 //This is my attemp

我试图将文件读取为filestream,重命名该文件,并将该文件以filestream的形式发送到文档管理系统(DMS)

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

但是,我想知道我是否真的不想重命名该文件,我想在文件变成filestream后重命名为file。我想探索File.Move以外的其他解决方案

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

//This is my attempt
FileStream fs = new FileStream()
fs.Name = "new_name" //<-- not working
但是在听了你所有的建议之后,我认为解决这个问题最安全的方法是:

  • 创建文件的副本
  • 重命名文件的副本
  • 上载文件的文件流
  • 删除该文件

  • 如果您的文档管理系统(DMS)使用的是(至少说起来似乎很奇怪)您运气不好,那么这是无法更改的(很容易)

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

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

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


    什么是DMS(对于不熟悉DMS的人来说)你的意思是
    fs.Name
    在你的代码中的其他地方被用来确定它在DMS中的名称吗?@将军,我猜是“文档管理系统”@约翰,哦,我明白了!具有潜在意外结果的不安全方式,并且在将来的.NET实现/其他.NET实现(例如Mono)中可能会有所不同:使用反射设置私有
    \u文件名
    字段的值。安全方法:将其包装在带有所需DMS名称的对象中。另一种安全方法:用新名称将文件复制到临时位置,完成后将其删除。请注意您的警告,我不太愿意使用这种方法。然而,我需要做的正是这一点!我有一个我不想打扰的文件(各种原因,只读访问,我只是希望源文件的所有内容都保持不变。但是,显然,这个filestream/字节数组的位置最终会忽略元数据并检查实际的文件名。因此,我需要在内存中获取该文件,在内存中更改名称,然后将其转换为字节数组。是否有什么需要改进的地方s在2.5年内发生了变化,这将使这个答案变得更好?谢谢!@ArvoBowen不,据我所知,没有新的方法来处理这个问题。请注意,对于第三方API的有限用例来说,这可能是合适的。尽管在未来的版本中这可能会发生变化,但至少在Microsoft实施CLR时不太可能发生变化。我的建议是:如果要投入生产,最好只编写单元测试,至少这样你会更有信心,这是一个发布到发布基本建议的版本#1(我懒得输入二进制文件)。
    //This is how the actual program code looked like
    FileStream input = File.OpenRead(uploadFile_path);
    obj.Update();
    obj.Fetch();
    
    System.IO.File.Move("oldfilename", "newfilename");
    
    // 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");