2010-04-28 116 views
1

我正在开发一个应用程序来读取excel电子表格,验证数据,然后将其映射到一个sql表。这个过程是通过流式读取器读取文件,验证数据,手动更正Excel电子表格,再次验证 - 重复此过程,直到所有数据都有效。由于文件被另一个进程使用而打开streamreader时出错

如果excel电子表格是打开的,那么当我试图通过streamreader读取数据时,我收到一个错误:“进程无法访问文件...因为它正在被另一个进程使用。”有没有办法删除锁或以其他方式将数据读取到streamreader中,而无需每次都打开和关闭excel?

+0

如果您在Excel中将Excel电子表格标记为只读,会发生什么情况?我认为Excel本身会在文件上打开一个排它锁,但也许通过使文件为只读,其他进程将被允许同时读取它。尽管如此,我没有出色的表现,所以我无法测试。 – mmr 2010-04-28 15:02:27

+0

好主意,除了用户需要能够编辑和保存数据更改。 – 2010-04-28 15:06:15

回答

2

当您拨打File.Open以获取流是否使用允许指定FileAccess的重载?

http://msdn.microsoft.com/en-us/library/y973b725.aspx

注意的参数:

public static FileStream Open(
    string path, 
    FileMode mode, 
    FileAccess access, 
    FileShare share 
) 

你可以通过FileAccess.Read第三参数去表明你只需要只读访问。您还应该设置FileShare.Read以允许其他人以只读方式打开文件,而不是自己锁定文件。请注意,如果MS Excel使用FileShare.None打开文件,则可能无法访问它。

+0

非常感谢你 - 这很好。只需注意其他人:我可以将FileShare设置为FileShare.ReadWrite,这样我就可以手动编辑电子表格(在Excel中打开csv文件),保存编辑并仍允许映射程序读取数据。 – 2010-04-28 15:43:05

相关问题