c# - 拒绝访问!?我无法从 C 驱动器上的安装文件夹中打开文件

标签 c# windows winforms directory itext

enter image description here我究竟做错了什么?

我有一个读取/复制/写入进程,可以访问随软件安装的文件夹。

这在测试构建时效果很好,但一旦创建了解决方案,它就完全停止工作了。我究竟做错了什么?

(代码分解) 我基本上访问了一个名为 CTW.pdf 的 PDF 接下来我们创建一个临时副本,软件会填充并展平 完成后,软件会使用新名称将新副本保存到同一目录(我只是将时间和日期添加到文件名中)

代码如下:

if (screenLock.Text == "")
{

}
else
{
    string fileNameExisting = @"C:\Program Files (x86)\Compliance Pro 2\CTW.pdf";
    string fileNameNew = @"C:\Program Files (x86)\Compliance Pro 2" + " CTW.pdf" + DateTime.Now.ToString("M/d/yyyy") + DateTime.Now.ToString("hh:mm:ss");

    using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open))
    using (var newFileStream = new FileStream(fileNameNew, FileMode.Create))
    {
        // https://www.codeproject.com/Tips/679606/Filling-PDF-Form-using-iText-PDF-Library 
        // Open existing PDF
        var pdfReader = new PdfReader(existingFileStream);
        // PdfStamper, which will create
        var stamper = new PdfStamper(pdfReader, newFileStream);
        var form = stamper.AcroFields;
        var fieldKeys = form.Fields.Keys;
        foreach (string fieldKey in fieldKeys)
        {
           form.SetField(fieldKey, "");
        }
        stamper.AcroFields.SetField("OSJNonOSJ", "TFSN");
        stamper.AcroFields.SetField("Branch", "9DCF");
        stamper.AcroFields.SetField("User Name Last First", "Joe" + "Pearson");
        stamper.AcroFields.SetField("Tested by Last First", emailTo.Text);
        stamper.AcroFields.SetField("Date Tested", DateTime.Now.ToString("M/d/yyyy"));
        stamper.AcroFields.SetField("COMMENTS", notes.Text);
        stamper.AcroFields.SetField("WDE-Yes", user.Text + "5");
    }
}

注意:我非常努力地确保我的软件不需要任何管理权限来完成它的功能,我真的很想在这里避免这种情况。

最佳答案

将文件直接放入 C:\或什至尝试 rwrite 那里是一个糟糕的选择。实际上,Windows 驱动器的每个相关文件夹都受到保护,因此您至少需要管理权限才能写入它们。没有这些,您甚至无法获得对程序目录的写权限(即使您可以这样做,您也不应该将数据放在那里)。

如果您想要一个可以写入和存储数据的地方,请查看 SpecialFolders .特别是 Userprofile 特定文件夹经过专门设计,因此您应该可以作为普通用户访问。如果数据在用户之间共享,则使用 Publics,否则使用 Profile。

关于c# - 拒绝访问!?我无法从 C 驱动器上的安装文件夹中打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46204836/

相关文章:

c# - 使用异常处理将 IEnumerable<Task<T>> 转换为 IObservable<T>

c - Windows Driver 时间戳函数

c# - 结合 DatePicker 和 TimePicker

c# - native 上下文菜单 c#

c# - 如何确定我的 .NET Windows Forms 程序在哪个监视器上运行?

c# - FROM close 中的语法错误?

c# - 亚马逊产品广告 api - c# 示例

c# - C# RegEx 匹配表达式中的可选元素

10'000 行后控制台中的 c++ 错误背景颜色

c# - Windows 语音识别 C#