问题标签 [system.io.file]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
910 浏览

.net - File.Move() 操作无法从原始文件夹中删除文件而没有错误

我有一个在 Windows Server 2008 R2 标准版上运行的 Windows 服务。这是一个 .NET 4.0 应用程序,它处理二进制文件并将处理后的文件移动到同一卷上的不同文件夹中。文件系统为 NTFS。问题在于以下代码:

路径srcFileNamedstFileName具有以下形式:D:\src_dir\fileX.binD:\dst_dir\fileX.bin。是loglog4net 记录器对象。读取文件以进行处理File.ReadAllBytes(srcFileName)

问题是,虽然代码大部分时间都按预期工作,但偶尔会复制一些文件而不是移动到目标文件夹,并且日志中没有记录错误。查看日志,似乎一切正常,但有些文件同时出现在源文件夹和目标文件夹中。该问题似乎与服务器负载有关,因为它似乎发生在 RAM 使用量超过 30 GB(从可用的 32 GB)并且平均磁盘队列超过 2 时。

我会很感激可能导致这种行为的任何想法,尤其是在移动失败时没有异常。有没有办法确保移动操作成功完成?

0 投票
2 回答
1077 浏览

c# - 获取文件扩展名并结合完整路径

我有一个 web api,例如:

因此,基本上,此方法采用文件名,并应返回保存在本地系统 + 扩展名上的该文件的完整路径。

在 web api 配置中,我有类似的东西:

0 投票
1 回答
328 浏览

c# - 文件上传创建临时文件,但另外跟踪实际文件名

有人可以就存储临时文件的技术如何工作给我建议。

例如,我正在创建一个简单的网络照片库管理。我使用 PhotoGalleryId 作为外键将 PhotoGallery 和照片信息保存在数据库中。对于每张照片,我都存储了文件名:即(photoname.jpg)。这样,当我从数据库中检索照片时,我可以简单地将文件名与根路径结合起来设置 img src。

我想进一步增强这一点,以便在用户上传文件时使用随机生成的文件名,而不是他们命名的文件名,以确保它始终是唯一的。此外,有人可以解释使用临时目录的技术,以及我是否必须将临时文件名存储在数据库(照片表)中。

0 投票
2 回答
927 浏览

c# - 任何人都可以解释为什么 StreamWriter 是非托管资源。

想了解 StreamWriter 源代码的哪一部分是非托管代码。已经浏览了http://referencesource.microsoft.com/网站中的代码。

不过好像代码比较复杂,源码里面有很好的注释。但仍然很难理解,可能是我的知识没有达到那个标准。但是,如果有人有任何博客或文章可以回答这个问题。这将会非常棒 !!!

0 投票
2 回答
58 浏览

c# - 批量获取完整目录信息的方式

我们有一个从远程跨大西洋 Samba 共享中获取文件列表的进程。这自然是缓慢的一面,但是由于我们不仅需要文件名,还需要最后一次写入时间来发现更新,这使情况变得更糟。目录中有很多文件,据我所知,.NET 文件 API 坚持要求我单独要求每个文件。有没有更快的方法来获取我们需要的信息?

0 投票
1 回答
2353 浏览

c# - 来自共享驱动器的 C# System.IO.File.Copy 在本地主机上工作,但在服务器上拒绝访问该路径

我想将 pdf 从共享文件夹复制到项目文件夹。所以我使用 System.IO.File.Copy:

当我在我的机器上本地运行应用程序但当我将它发布到服务器并转到我得到的站点时,该文件会复制:

如何授予对站点的访问权限以访问该文件位置?

请注意:

  • 该站点是一个 MVC Web API INTRANET 应用程序
  • 它使用基于 Windows 的身份验证
  • 当我说本地主机时,我的意思是在视觉工作室(IISExpress)中

我试过的:

  • 授予每个人对文件夹 \\netstore\IT\SIGN\ 的访问权限

我查看了堆栈溢出的其他帖子(拒绝访问路径),但大多数答案都说授予对 IIS_USRS 的访问权限,并且我已授予每个人访问权限,因此这不起作用。

---更新1---

@Chris Pratt 我已根据您提供的链接更新了我的 IIS 设置。

  1. 身份字段已从 NetworkService 更新为 ApplicationPoolIdentity。

在此处输入图像描述

  1. 我授予对<domainname>\<machinename>$

在此处输入图像描述

---更新2---

@jp2code 我打开了网络发现,但仍然遇到同样的错误。

在此处输入图像描述

---更新3---

作为使用Impersonation 类的临时解决方法,可以访问共享文件夹:

0 投票
1 回答
369 浏览

.net - 在 PowerShell 脚本中打开文件流时出现意外行为

我正在尝试创建一个附加(或创建,然后附加)到现有文件的脚本。该文件正在与另一个系统连接,因此为了避免在我追加文件时正在读取文件的情况,我正在对其创建一个非共享锁。脚本似乎可以完美运行,但有一个我无法理解的异常。这是一个代码示例:

有一个条件不会触发 catch 块 - 如果文件已经通过 powershell 控制台锁定,并且如果此代码是从脚本运行而不是直接在窗口中键入的。如果我首先在 Excel 中打开文件,catch 块总是有效的。如果我通过在控制台中键入此代码来执行此代码,它也始终有效。但是,如果我首先通过在控制台中键入文件来锁定文件,然后运行尝试执行相同操作的脚本,则不会引发异常并且不会触发 catch 块。

我在这里想念什么?

更新:我做了额外的故障排除,这是我的发现。首先,如何重现这个:

  • 创建一个名为 test.txt 的文件
  • 创建一个名为 的脚本test1.ps1,将上面的代码放入其中
  • 在控制台中运行此命令:

    /li>
  • 现在执行test1.ps1脚本

并且脚本的 catch 块不会触发......在我的工作环境中!我在家里测试过,它按预期工作。所以我回去工作并再次测试它,这次使用PC本地驱动器上的文件并且它工作。使它无法工作的一个区别是我正在处理的文件位于我公司的 DFS 命名空间中。我在我的 PC 上映射的本地网络驱动器上尝试了它,它运行良好。

因此,无论出于何种原因,PowerShell 都不会像预期的那样对 DFS 命名空间上的 PowerShell 锁定的文件做出反应。我尝试过的所有其他应用程序都会检测到锁定:记事本和 Excel 拒绝读取文件,当我在 PDF 文档上测试它时,Acrobat 也不会打开它。但是PowerShell没有抱怨,甚至处理所有后续方法都没有错误——没有任何效果;CopyTo()Flush()方法不会失败,但文件没有改变。

0 投票
1 回答
630 浏览

c# - 计算复制文件列表时的传输速率和剩余时间

我想在复制大量文件(也是大文件)时获得准确的传输速率和剩余时间。这应该通过主进度条和定义的速度和剩余时间标签来可视化。

在例程开始时,后台工作人员遍历给定目录并构建具有源和目标路径的字典。

在此处找到的机制:计算文件复制的剩余时间。(史蒂文·利肯斯的回答)

问题是,永远不会达到 100% 的进度,它在某个时候以 96%-98% 完成,但从未达到 100%。使用不同的方法计算(递归)目录计算的总字节数可能有所不同。

下一点是,显示的传输速率甚至是正确的,如果它乘以 10 .... 所以我的 ssd 机器显示的传输速率显示为 30 MB/s,更像是 300 MB/s。显示的速率肯定是错误的。

所以这里有2个问题:1.)错误的进度计算2.)错误的传输率计算(速度还可以)

谁能指出为什么?

一个例子:

将目录(21 个目录,228 个文件,总计:326MB)复制到 NAS 需要:12.4434796 秒,据报道平均速度为 2-3 MB/秒。但复制速度快了近10倍。

0 投票
1 回答
1064 浏览

c# - Windows Server 2012 R2 - System.IO.FileNotFoundException

我有一个用 C# 开发的应用程序,它在我的 Windows 7 x64 PC 上运行良好,但是当我尝试在我的 Windows Server 2012 R2 VPS 上运行相同的应用程序时,我收到一个错误“(TheApplicationName”已停止工作)

当我单击查看问题详细信息时,我得到以下信息

谁能告诉我这里的问题是什么

非常感谢

0 投票
2 回答
755 浏览

c# - StreamWriter 可以保存整个 Class 吗?

我创建了一个请求用户输入的类(7 个单个数据的文本框)

我需要使用 StreamWriter 类保存该数据以供以后在平面文件中使用。

我是否必须为每个字段创建单独的实例?

private void btnSaveFile_Click(object sender, EventArgs e) { StreamWriter studentInfo = new StreamWriter(txtFirstName.Text); }

或者有没有办法让 StreamWriter 打印该类中的所有字段?我尝试重载该方法,但显然无法做到。