小编tec*_*ebe的帖子

长路径\\?\ workaround无法处理某些安装

我正在处理的应用程序需要处理具有很长文件/路径名的文件.这是一个.Net 4.6应用程序,所以我实现了4.6.2之前的解决方法,以允许此处此处概述的\\?\语法.

这是我用来启用该功能的代码(我无法修改app.config,因此必须在代码中设置):

var type = Type.GetType("System.AppContext");
if (type != null)
{
    AppContext.SetSwitch("Switch.System.IO.UseLegacyPathHandling", false);
    AppContext.SetSwitch("Switch.System.IO.BlockLongPaths", false);

    var switchType = Type.GetType("System.AppContextSwitches");
    if (switchType != null)
    {
        // We also have to reach into System.AppContextSwitches and manually update the cached private versions of these properties (don't ask me why):

        var legacyField = switchType.GetField("_useLegacyPathHandling", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
        legacyField?.SetValue(null, (Int32)(-1)); // <- caching uses 0 to indicate no value, -1 for false, 1 for true.

        var blockingField = switchType.GetField("_blockLongPaths", System.Reflection.BindingFlags.Static …
Run Code Online (Sandbox Code Playgroud)

c# windows registry file file-handling

6
推荐指数
1
解决办法
126
查看次数

将 IV 添加到 CryptoStream 的开头

我正在现有的文件管理程序中实施本地加密。

我可以找到的许多示例代码,例如Microsoft 的,演示了如何直接写入文件,但我需要做的是提供一个在程序中其他地方使用的流:

CryptoStream GetEncryptStream(string filename)
{
    var rjndl = new RijndaelManaged();
    rjndl.KeySize = 256;
    rjndl.BlockSize = 256;
    rjndl.Mode = CipherMode.CBC;
    rjndl.Padding = PaddingMode.PKCS7;

    // Open read stream of unencrypted source fileStream:
    var fileStream = new FileStream(filename, FileMode.Open); 

    /* Get key and iv */

    var transform = rjndl.CreateEncryptor(key, iv);

    // CryptoStream in *read* mode:
    var cryptoStream = new CryptoStream(fileStream, transform, CryptoStreamMode.Read); 

    /* What can I do here to insert the unencrypted IV at the start of the
       stream …
Run Code Online (Sandbox Code Playgroud)

c# encryption aes

3
推荐指数
1
解决办法
564
查看次数

标签 统计

c# ×2

aes ×1

encryption ×1

file ×1

file-handling ×1

registry ×1

windows ×1