问题标签 [file-in-use]

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 投票
2 回答
1005 浏览

c# - 检查文件是否被其他可执行运行实例使用

在详细介绍之前,我的程序是使用 C# .Net 4.0 在 Visual Studio 2010 中编写的。

我编写了一个程序,它将为每次运行生成单独的日志文件。日志文件以时间命名,精确到毫秒(例如20130726103042375.log)。如果当天的主日志文件尚不存在,该程序还将生成一个主日志文件(例如,*20130726_Master.log*)

在每次运行结束时,我想将日志文件附加到主日志文件。有没有办法检查我是否可以成功附加?然后重试Sleep一秒钟或其他什么?

基本上,我有 1 个可执行文件和多个用户(假设有 5 个用户)。

所有 5 个用户将同时访问和运行此可执行文件。由于所有用户几乎不可能在完全相同的时间(最多毫秒)启动,因此生成单独的日志文件不会有问题。

但是,当我尝试将这些日志文件合并到主日志文件时,问题就出现了。虽然不太可能,但我认为如果多个用户附加到同一个主日志文件,程序会崩溃。

我使用的方法是

我已经检查了该lock对象,但我认为它在我的情况下不起作用,因为在一个实例中运行多个实例而不是多个线程。

我调查的另一种方式是try/catch,像这样

但我认为这并不能解决问题,因为 masterLogFile 的状态可以在那短暂的毫秒内改变。

所以我的总体问题是:是否有办法在 masterLogFile 未使用时附加到它,如果是,则在短暂超时后重试?或者,如果有另一种创建 masterLogFile 的方法?

提前谢谢你,很抱歉这么长的信息。我想确保我传达我的信息并解释我尝试或调查的内容,这样我们就不会浪费任何人的时间。

如果我可以提供更多信息来帮助您帮助我,请告诉我。

0 投票
2 回答
2480 浏览

pascal - Lazarus:如何检查文件是否正在使用?

在尝试访问文件之前,我需要检查文件是否正在使用中。有没有办法在拉撒路环境中做到这一点?

0 投票
1 回答
2562 浏览

c# - 使用服务器而不是本地主机上传文件时,另一个进程正在使用文件错误

我对 MVC 和 .NET 还很陌生,我遇到了第一个问题,我已经坚持了 3 天。我为这篇冗长的帖子道歉。

我正在处理的项目的一部分要求用户能够选择 XLS 或 XLSX 文件并上传它,以便应用程序可以导入数据。上传的文件很可能有超过 20,000 行数据。

我有包含 5000、10000 和 20000 行的测试文件。当我在本地机器上运行我的应用程序(使用 Visual Studio 2010)时,所有这些文件都会保存到网络共享并处理得很好。没有错误。但是,当我将应用程序部署到我们的开发服务器时,我在5 分钟后收到一个错误,即无法访问 10k 和 20k 文件,因为它正在被另一个进程使用。

错误消息:该进程无法访问文件“已删除路径\TestBook-10k-rows.xlsx 的这一部分”,因为它正被另一个进程使用。

堆栈跟踪:

10000 行文件的大小为 304KB,我在 web.config 中设置了如下长度限制:

我在 5 分钟左右找不到任何特别的东西,但是在我开始上传 5 分钟后它总是返回错误。

我已经用 Chrome 和 IE 试过了。两者都通过 localhost 工作,都不能通过我们的 dotnet 应用服务器工作。

堆栈跟踪说它在 SaveAs() 方法上爆炸了,但我可以在网络共享位置看到文件并且大小匹配。

保存文件后,我必须读取它并将数据返回到新视图。在将数据返回到视图之前,对数据进行了相当多的处理,这是我希望等待 5 分钟或更长时间的地方。读完文件后,我关闭连接并从网络共享中删除文件。在我收到异常后不久,该文件也被删除。当我开始每次上传时,该文件不存在。

我是目前唯一使用此应用程序的人,因为它仍在开发中。在我进行测试时,我不相信其他人正在访问网络共享上保存的副本。我可以始终如一地重现这个问题,但我不知道它为什么会发生。

有没有人看到过这样的事情或对我有什么建议?我的猜测是我们的应用服务器上有一个设置,但我无法查明它。

谢谢!

编辑:

这是处理文件上传的代码。

我确实看到记录了相同的错误,一次是在执行 SaveAs() 时,然后是在执行 Delete 时。奇怪的是,文件确实消失了。几乎就像应用服务器有另一个线程在此过程中尝试做某事,而这不会发生在 localhost 上。

编辑

在我更改 executionTimeout 值后,我注意到 Chrome 在 5 分钟标记处说“Uploading 79%...”,然后文件在网络共享上消失了,然后重新出现,然后一两分钟后,Chrome 说页面不可用,带有“错误代码:ERR_INVALID_RESPONSE”。该文件尚未从网络共享中删除。在 IE 中,我被要求在 5 分钟后再次登录该应用程序。

0 投票
0 回答
71 浏览

visual-studio-2010 - Windows 7 安装程序未显示 FileInUse 对话框

我按照正常程序在 Visual Studio 中创建了一个安装程序。我运行我的应用程序。任务管理器正在显示它。我让它保持打开/运行,然后去卸载应用程序。但是,Windows(未安装 Visual Studio)不显示文件使用对话框。我已经在未安装 Visual Studio 的全新 Windows 7 机器中检查了该问题。在 Visual Studio 安装期间是否安装了任何额外的包来帮助显示 fileinuse 对话框?

0 投票
1 回答
20405 浏览

vb.net - VB - 使用 StreamWriter 写入文件

我正在尝试使用 StreamWriter 写入文件。

我在调试模式下停止了代码,我看到它崩溃并在到达第 2 行时直接进入异常。

这是因为我刚刚制作了文件并且它仍在使用中?我怎样才能避免呢?

0 投票
2 回答
372 浏览

dll - Dll 与同名的 windows-dll 混淆,导致 WiX-Setup 中的文件正在使用对话框

我使用 wix 进行了多项设置,通过设置以下属性来抑制所有“正在使用的文件”和“请立即/稍后重新启动应用程序/计算机”对话框:

但是一个带有名为“KernelBase.dll”的 dll 的产品在卸载时仍然提示使用文件对话框,列出奇怪的标准 Windows 应用程序,如 cmd、paint、notepad ......我可以按“忽略”或“再试一次”继续。卸载成功,没有留下任何文件。

问题似乎是我们在C:\Program Files (x86)\ProductName\中的KernelBase.dll与来自C:\Windows\SysWOW64\de-DE\的KernelBase.dll.mui混淆了。重命名我们的 dll 后,文件使用对话框不再出现。

我不敢相信 dll 是由它们的名字引用的。我不太了解 dll 注册,但完整路径似乎是 dll 的通用 UID,那么 Windows Installer 指的是哪个搞砸的列表?一个人不知道任何 Windows dll 的任何名称,所以我想如果有任何冲突,应该有一些东西阻止我构建(或至少使用)这样的 dll。

所以我的问题是:Windows Installer 在这里做什么?我能做些什么来取悦它,这样它就不会混淆这两个 dll。重命名我们自己的dll应该是紧急解决方案。

微星版本:5.0(.7601.17807)

操作系统:Windows 7 Professional 64bit

提前致谢。

0 投票
0 回答
54 浏览

file-io - 是否有一种 POSIX 方法来确定文件(实际上是串行端口)是否可以在不打开的情况下打开?

我们制作的设备可以在各种 POSIX 兼容系统上显示为 USB 串行端口。我支持一个 API,它允许调用者检索我们设备可用的所有当前可用(即未使用、具有正确权限等)实例的列表。呼叫者还可以获得一个列表,其中还指示了正在使用的设备。

当然,最简单的方法是尝试打开/关闭每个候选串行端口并注意哪些是可以打开的。我不希望这样做,因为使用此 API 的多个应用程序(这将是其应用程序中的库 / dylib)可能会产生竞争条件,它们都尝试同时查询相同的串行端口,这将导致一个应用程序错误地认为该设备正在使用中。

所以我需要的是一种在不实际打开端口的情况下知道端口是否可以打开的方法。我见过其他人使用锁定文件方案,其中创建了一个特殊文件来指示端口正在使用中 - 假设如果文件不存在,则端口可用。我的问题是,除了我的图书馆之外,可能还有其他端口的用户不遵守这样的方案,所以我不能依赖它。

是否有一些低级的 POSIX 功能可以让我在这方面查询文件的状态,而无需实际尝试打开它?

0 投票
1 回答
286 浏览

readonly - 在 Word.Application.Documents 中找不到但仍被锁定的已打开文档?

我做了一些 Word 自动填充一些用作模板的 Word 文档中的空白。

一个模板的使用频率高于其他模板,这会导致错误,因为它被锁定并且 Word 无法打开它,但我希望以只读方式打开它。

打开文档

问题是模板文档打开一次,没有任何缺陷。但是当必须重复使用相同的模板时,虽然lole_word.Documents.Count总是返回0,但当 Word 打开之前使用的模板时,它被锁定,最后 Word 出现询问我是否要以只读模式打开它。

**Word - 文件已经在用户对话框中**

我希望避免这种烦恼,只需以只读模式打开文件,因为一旦填写,它将保存在其他地方。

我的问题是,即使我通过将第二个参数设置为以只读模式打开true,Word 似乎并没有以这种方式看到它并且仍然弹出他的File Already in Use by Another User对话框,然后我的应用程序失去了对 Word 的控制并且它崩溃了。

0 投票
3 回答
828 浏览

database - 在表格以另一种形式使用后,使用表格中的数据填充网格后出现“文件正在使用”错误

我是学习 VFP 的初学者,我面临一个问题。

我有两种形式:

  • 需要填写用户名和密码的登录表单。这些值是在数据库的表中搜索的。
  • 另一个表格,其中包含来自用户表的日期网格。我用它来更改网格中选定用户的密码。

问题是我无法使用“用户”表中的数据填充网格,因为我不断收到错误“文件正在使用”。我将数据的 RecordSource 设置为表、sql 语句和别名,但仍然没有。我尝试用列表和组合框替换网格,但我仍然收到错误。

请帮忙 !:) 谢谢

0 投票
0 回答
386 浏览

linux - 在 Virtual Box (Windows 7) 中修改“忙碌文件”Linux VM

我正在尝试使用 shell 脚本修改我的 ace/ext-modelist.js,代码如下:

问题是这一切都有效,除非我尝试修改ace/ext-modelist.js我收到文件正忙于跳过文件错误。

我知道在 Windows 中运行 VM 是一个问题,因为它在 Mac 和 Linux 上运行良好,我已经通过 dos2unix 运行了所有文件,所以错误不在于 shell 脚本本身,可能是命令?

编辑:

使用 bash -x 运行并输出到日志文件后,出现以下错误: