【问题标题】:create file with FileStream and apply FileAttributes使用 FileStream 创建文件并应用 FileAttributes
【发布时间】:2011-09-28 07:05:17
【问题描述】:

是否可以在使用 FileStream 创建文件时同时应用 FileAttributes?我想使用 FileAttributes.Temporary 文件属性创建用于流写入的文件。

【问题讨论】:

标签: c# .net-4.0 filestream file-attributes


【解决方案1】:

您可以使用FileOptions.DeleteOnClose 作为参数之一。完成操作并处置流后,文件将自动删除。

【讨论】:

  • 我正在开发文件队列系统,我使用 FileAttributes.Temporary 作为队列操作的特殊属性。因此,当为文件流创建文件时,我想分配 FileAttributes.Temporary imidiatlly。
  • 只需查看重载,您将自己回答您的问题 - 立即设置 FileAttributes 没有重载。如果您想在一行中创建一个扩展方法,那么您将能够使用 using 构造并正确处理流,而无需使用 try..finally。那么,为什么你需要它在一行中呢?
【解决方案2】:

是的,当然你也可以使用 File.SetAttributes 方法来应用 FileAttributes

【讨论】:

  • 我想在 FileStream 创建文件的同时这样做。 FileStream 方法是否有可能设置 FileAttributes?
【解决方案3】:

为什么需要一次性完成所有操作?

  1. 只需创建文件(使用File.Create,如果是临时文件,则使用GetTempFileName。)
  2. Set the attributes 在新创建的文件上
  3. 使用适合您的任何方法打开文件

【讨论】:

    【解决方案4】:

    如果你使用 Win32 CreateFile 方法,你可以做到这一点

    uint readAccess = 0x00000001;
    uint writeAccess = 0x00000002;
    
    uint readShare = 0x00000001;   
    
    uint createAlways = 2;
    
    uint tempAttribute = 0x100;
    uint deleteOnClose = 0x04000000; 
    
    new FileStream(new SafeFileHandle(NativeMethods.CreateFile("filename", 
                                                               readAccess | writeAccess, 
                                                               readShare, 
                                                               IntPtr.Zero, 
                                                               createAlways, 
                                                               tempAttribute | deleteOnClose, 
                                                               IntPtr.Zero), 
                                      true), 
                   FileAccess.ReadWrite, 4096, true);
    
    
    private static class NativeMethods
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        internal static extern IntPtr CreateFile(string name, uint accessMode, uint shareMode, IntPtr security, uint createMode, uint flags, IntPtr template);
    }
    

    有关详细信息,请参阅CreateFile 的 MSDN 文档

    【讨论】:

    • 为什么降级?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多