Tag: filesystems

如何获取使用短名称格式化的Server.MapPath()(8.3 MS-DOS格式)?

我正在使用Process.Start在ASP.NET服务器上运行控制台应用程序,并且程序的参数需要一个以旧的MS-DOS 8.3格式格式化的路径。 例如,在这种格式的文件夹的控制台名称中可以通过键入“dir / X”获得: 如何获取使用文件夹名称的短名称版本(8.3 MS-DOS格式)格式化的Server.MapPath()?

使用FileSystemWatcher类来记录正在进行更改的用户

我有一个控制台应用程序,用于检查文件系统上发生的更改。 我试图找出是否有可能获得正在进行更改的个人的用户名?

使用网络/文件系统调用时防止exception(预防性维护)?

我有一个朋友在这方面与我意见不一致,我只想在这种情况下得到一些关于谁是对错的反馈。 FileInfo file = …; if (file.Exists) { //File somehow gets deleted //Attempt to do stuff with file… } 我的朋友指出的问题是,“那么当我检查存在时文件是否存在怎么办?没有什么可以防止在检查文件被删除后尝试访问它会导致exception的可能性。所以,是否值得在前检查存在?“ 我能想到的唯一一件事就是MSDN清楚地检查了他们的例子,所以必须有更多。 MSDN – FileInfo 。 但是,它确实让我感到疑惑……额外的电话甚至值得吗?

什么可能导致XML文件填充空字符?

这是一个棘手的问题。 我怀疑它需要一些文件系统的高级知识才能回答。 我有一个针对.NET framework 4.0的WPF应用程序“App1”。 它有一个Settings.settings文件,用于生成标准App1.exe.config文件,其中存储了默认设置。 当用户修改设置时,修改将进入AppData\Roaming\MyCompany\App1\XX0.0\user.config 。 这是所有标准的.NET行为。 但是,有时,我们发现客户机器上的user.config文件不是它应该是的,这会导致应用程序崩溃。 问题看起来像这样: user.config大小与XML填充时的大小相同,但是它只是一堆NUL字符而不是XML。 它的字符0一遍又一遍地重复。 我们没有关于导致此文件修改的内容的信息。 如果我们只是删除user.config ,我们可以在客户的设备上修复该问题,因为公共语言运行时只会生成一个新的。 他们将失去他们对设置所做的更改,但可以再次进行更改。 但是,我在另一个WPF应用程序“App2”中遇到了这个问题,另一个XML文件是info.xml 。 这次是不同的,因为文件是由我自己的代码而不是CLR生成的。 常见的主题是两个都是C#WPF应用程序,都是XML文件,在这两种情况下,我们完全无法在测试中重现问题。 这可能与C#应用程序与XML文件或文件交互的方式有关吗? 我们不仅无法在当前的应用程序中重现该问题,而且我甚至无法通过编写有意产生错误的自定义代码来重现该问题。 我找不到单个XML序列化错误或文件访问错误导致文件填充空值。 那么可能会发生什么? App1通过调用Upgrade()和Save()以及获取和设置属性来访问user.config 。 例如: if (Settings.Default.UpgradeRequired) { Settings.Default.Upgrade(); Settings.Default.UpgradeRequired = false; Settings.Default.Save(); } App2通过序列化和反序列化XML来访问info.xml : public Info Deserialize(string xmlFile) { if (File.Exists(xmlFile) == false) { return null; } XmlSerializer xmlReadSerializer = […]

搜索目录中的所有文件时显示进度

我之前问过快速获取特定路径中的所有文件和目录的问题,以便尽可能快地找到文件。 我正在使用该解决方案,以便找到与正则表达式匹配的文件名。 我希望显示一个进度条,因为有一些非常大而慢的硬盘驱动器,它仍然需要大约1分钟才能执行。 我在另一个链接上发布的解决方案无法让我知道为了让我显示进度条,还有多少文件丢失了。 我正在考虑做的一个解决方案是尝试获取我正在计划遍历的目录的大小 。 例如,当我右键单击文件夹C:\Users我可以估计该目录的大小。 如果我能够知道大小,那么我将能够通过添加我找到的每个文件的大小来显示进度。 换句话说,progress =(文件大小的当前总和)/目录大小 出于某种原因,我无法有效地获得该目录的大小。 有关堆栈溢出的一些问题使用以下方法: 但请注意,我得到一个例外,无法枚举文件。 我很高兴在我的驱动器上尝试这种方法。 在那张照片上,我试图计算文件数量以显示进度。 我可能无法使用该方法有效地获取文件数量 。 当人们询问how to get the number of files on a directory我只是尝试堆栈溢出的一些答案,并且人们询问how the get the size fa directory 。

C#:使用FileSystemWatcher监视复制或移动的文件

我在这里和整个网络上遇到过几个“解决方案”,但似乎都没有符合要求。 我要做的是让app监视新文件的文件夹(通过创建,移动或复制)并对这些对象执行操作。 就是这种情况,我转向FileSystemWatcher类来执行此操作。 问题是文件FileSystemWatcher.Created事件在创建整个文件之前被触发(最明显的是通过大文件的副本看到)。 有没有办法让这个事件在文件创建结束时触发而不是从头开始? 我尝试过FileSystemWatcher.NofityFilter属性的各种组合但没有成功。 提前致谢! 🙂

如果指定的文件名已存在,则获取唯一文件名的方法(.NET)

如果文件名已经存在,是否有内置的.NET函数来获取唯一的文件名? 因此,如果我尝试保存MyDoc.doc并且它已经存在,则该文件将以名称MyDoc(1).doc保存,例如与浏览器下载相同的方式。 如果没有,实现这一结果的最有效方法是什么? 我目前正在使用File.Move函数。

从C#中的组件部分构建目录字符串

如果我有许多目录名称作为文字字符串或包含在变量中,那么将这些目录组合在一起以形成完整路径的最简单方法是什么? 我知道 Path.Combine 但这只需要2个字符串参数,我需要一个可以接受任意数量目录参数的解决方案。 例如: string folder1 =“foo”; string folder2 =“bar”; CreateAPath(“C:”,folder1,folder2,folder1,folder1,folder2,“MyFile.txt”) 有任何想法吗? C#是否支持方法中的无限args?

重复GetAccessRules,FileSystemAccessRule条目

我从以下代码中获取了一个重复的FileSystemAccessRule: C:\inetpub\wwwroot\AspInfo\Account BUILTIN\IIS_IUSRS : Allow : ReadAndExecute, Synchronize BUILTIN\IIS_IUSRS : Allow : -1610612736 NT SERVICE\TrustedInstaller : Allow : FullControl NT SERVICE\TrustedInstaller : Allow : 268435456 我无法弄清楚它是什么或为什么。 并且显示的权限与我可以看到的文件FileManager属性不匹配。 例如,如何从此迭代或类似迭代中找到“列出文件夹内容”权限。 如果有人知道.NET文档中的示例,那将会有所帮助。 protected void directoryInfo() { var di = new DirectoryInfo(Server.MapPath(“/”)); foreach (DirectoryInfo dir in di.GetDirectories()) { Response.Write(dir.FullName + “”); DirectorySecurity ds = dir.GetAccessControl(); foreach (FileSystemAccessRule fsar in […]

检测c#中的驱动器挂载事件

如何在将新驱动器添加到“我的电脑”时捕获事件,并且最好在NTFS驱动器上创建某个驱动器的新安装点时? 我发现了这个,但它对挂载的文件夹不起作用: _eventWatcher = new ManagementEventWatcher(“SELECT * FROM Win32_VolumeChangeEvent”); _eventWatcher.EventArrived += (o, args) => {switch(args.NewEvent[“EventType”].ToString()[0]) { case ‘2’: //mount Debug.WriteLine(args.NewEvent[“DriveName”]); break; case ‘3’: //unmount break; } }; _eventWatcher.Start(); 有任何想法吗?