相关疑难解决方法(0)

好好又干净的方式等待文件关闭

可能重复:
等到文件在.NET中解锁

我有一个打开的文件,如.Doc或.txt,我必须等到用户关闭它.我已经尝试了这个,根据等到文件在.NET中解锁:

while (true)
{
    try
    {
      using (FileStream Fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None, 100))
        {
            //the file is close
            break;
        }
    }
    catch (IOException)
    {
        //wait and retry
        Thread.Sleep(1000);
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好用,但是有可能找到没有try/catch的解决方案并处理异常?

.net c# file

23
推荐指数
1
解决办法
1万
查看次数

16
推荐指数
1
解决办法
2万
查看次数

文件正由另一个进程使用

我有一个大致这样做的程序:

  1. 打开一个文件来读取它.
  2. 关闭文件
  3. 启动filewatcher以监视文件中的更改.
  4. 一旦检测到更改,filewatcher的EnableRaisingEvents标志将设置为false,并且该过程将从步骤1开始重复.

问题是,在从第4步到第1步之后,它无法读取文件说它正被另一个进程使用.

我收到错误:

未处理的异常:System.IO.IOException:进程无法访问文件'c:\ test.xml',因为它正由另一个进程使用.

什么出错了?我的程序的第1步的读者是否仍然打开文件,或者是访问该文件的完全不同的进程,还是filewatcher在从4移动到步骤1之后仍在观看文件,尽管将标志设置为false?

c#

10
推荐指数
1
解决办法
2万
查看次数

如何最好等待文件锁释放

我有一个应用程序,我有时需要从正在写入的文件中读取并因此被锁定.正如我从其他问题中理解的那样,我应该捕获IOException并重试直到我能够阅读.

但我的问题是我如何确定该文件已被锁定,并且它不是另一个IOExcetpion发生的.

.net c# ioexception filelock

9
推荐指数
1
解决办法
7212
查看次数

以最小的延迟快速显示非常高分辨率的图像的缩略图

我需要在控件中显示高分辨率图像的预览缩略图,以供用户选择。我目前使用ImageListView加载图像。这对于低至中分辨率的图像效果很好。但是,在显示非常高分辨率的图像的缩略图时会出现明显的延迟。可以从https://drive.google.com/open?id=1Qgu_aVXBiMlbHluJFU4fBvmFC45-下载示例图像E81C

图像大小约为5000x3000像素,大小约为12 MB。可以通过使用此图像的1000份副本来复制此问题。

问题屏幕截图在此处上传

https://giphy.com/gifs/ZEH3T3JTfN42OL3J1A

使用后台工作程序加载图像

foreach (var f in filepaths)
{
    imageListView1.Items.Add(f);              
}
Run Code Online (Sandbox Code Playgroud)

1.为了解决此问题,我尝试调整高分辨率图像的大小并将调整大小后的图像添加到ImageListView ...中,但是要进行重新调整大小会浪费大量时间,并且缩略图生成速度很慢。

Bitmap x = UpdatedResizeImage2(new Bitmap(f), new Size(1000, 1000));
string q = Path.GetTempPath() + Path.GetFileName(f);
x.Save(Path.GetTempPath() + Path.GetFileName(f));
x.Dispose();
imageListView1.Items.Add(Path.GetTempPath() + Path.GetFileName(f));
Run Code Online (Sandbox Code Playgroud)

2.我也尝试过Image.CreateThumbnail方法,但这也很慢。

有没有更好的方法来解决此问题?

.net c# system.drawing winforms

8
推荐指数
3
解决办法
362
查看次数

多线程环境中的文件访问策略(Web App)

我有一个文件,它是从Web服务获取并在Web应用程序中本地缓存的某些数据的XML表示形式.我们的想法是,这些数据非常静态,但可能会发生变化.所以我已将其设置为缓存到文件,并对其进行监视,以检查它是否已被删除.删除后,文件将从其源代码刷新并重建.

我现在正在遇到问题,因为很明显在多线程环境中,当它仍然在读取/写入文件时试图访问数据时它会崩溃.

这让我感到困惑,因为我添加了一个要锁定的对象,并且在读/写期间总是被锁定.据我了解,从其他线程尝试访问将被告知"等待"直到锁被释放?

只是为了让你知道,我是多线程开发的新手,所以我完全愿意接受这是我的一个搞砸:)

  • 我错过了什么吗?
  • 多线程环境中最好的文件访问策略是什么?

编辑

对不起 - 我应该说这是使用ASP.NET 2.0 :)

asp.net file-io multithreading caching web-applications

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

如何监控新上载文件的目录?

我需要创建一个Windows服务,它将监视目录中新上传的文件.文件大小约为100K到400K.

我的监控系统是否有可能会注意到一个新文件,但该文件还没有完全复制完毕?即它还在流入并且还没有编写EOF?

windows-services file

5
推荐指数
2
解决办法
465
查看次数

File.Copy() 给出 system.IO.IOException: 该进程无法访问该文件..因为它正在被另一个进程使用。例外

我在我的 asp.Net 应用程序中使用 File.Copy(..,..) 方法,它向我显示 system.IO.IOException: 该进程无法访问该文件..因为它正在被另一个进程使用。

任何解决办法

提前致谢

.net file-copying

5
推荐指数
1
解决办法
1万
查看次数

File.ReadAllBytes 抛出 IOException 表示该进程无法访问该文件,因为它正被另一个进程使用

File.ReadAllBytes 在两次调用之间没有足够的调用间隔时会导致 IOException 吗?

当我设置网格的 Row 和 Col 时,它会触发 RowColChange 事件。RowColChange 有一些代码可以使用 File.ReadAllBytes 打开同一个文件。我知道 ReadAllBytes 内部在 FileStream 上使用 using 因此文件流在使用后关闭。但是在告诉操作系统文件被释放时是否可能有一些延迟,因此 File.ReadAllBytes 的后续使用可能会失败并引发异常。有什么想法吗?谢谢!

grid.Row = 0
grid.Row = 1
grid.Col = 3


Private Sub grid_RowColChange(ByVal sender As Object, ByVal e As System.EventArgs) Handles grid.RowColChange
    'Is it possible to get IOException saying the process can't access the file because it is being used by another process.
     Display(File.ReadAllBytes(filePath))
End Sub
Run Code Online (Sandbox Code Playgroud)

.net vb.net system.io.file

5
推荐指数
2
解决办法
5899
查看次数

IIS 6/7是否在服务时锁定图像文件?

我正在编写一段.NET代码,需要覆盖IIS 6或7上托管的网站中的图像文件.应该触摸图像的唯一进程是IIS和我的覆盖图像的进程.

我想知道IIS是否会锁定文件,导致我的覆盖代码抛出异常.

.net iis

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

如何在不锁定磁盘文件的情况下读取文本文件?

基本上我有一些这样的代码将 ASCII 文本文件的内容读入一个列表:

    List<string> lines = new List<string> ( );
    using ( StreamReader sr = File.OpenText ( textfile ) )
    {
        string s = String.Empty;
        while ( ( s = sr.ReadLine ( ) ) != null )
            lines.Add ( s );
    }
Run Code Online (Sandbox Code Playgroud)

但问题是当另一个线程正在写入文件时,它会引发异常:

该进程无法访问文件“myfile.txt”,因为它正被另一个进程使用。

File.ReadAllLines 也会发生同样的事情。为什么这些函数会锁定磁盘上的文件或关心该文件正在被另一个进程使用?

我只是想定期读取内容,所以如果这次正在使用它,那么下次它将读取更新的内容。我这样做是为了检查是否添加了新条目,因为用户也可以手动添加它们。

我可以使用哪些函数将此文件读入内存而不引发异常,或者我应该使用在 try/catch 中运行此代码。

这是最新的代码:

        var fs = new FileStream ( filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite );
        using ( StreamReader sr = new StreamReader ( fs ) )
        {
            string s = String.Empty;
            while ( …
Run Code Online (Sandbox Code Playgroud)

.net c# parsing file streamreader

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