C# 使用一个线程将文件复制到不同的目标是线程安全的吗

C# 使用一个线程将文件复制到不同的目标是线程安全的吗,c#,multithreading,file,C#,Multithreading,File,我需要同时在不同的计算机上加载文件的内容。因为StreamReader将占用该文件,所以我想在打开它之前将其复制到一个临时文件夹中。(标题更为笼统,因为在一台计算机上运行的两个线程与两台分别运行一个线程的计算机之间应该没有区别。) 问题:即使复制目的地分开,两个线程同时复制一个文件是否会相互影响?从多个线程/进程/机器读取一个文件是安全的,只要没有人同时写入该文件。从多个线程/进程/机器读取一个文件是安全的,只要没有人同时写入文件。不要这样做-在创建文件流时只使用正确的参数要容易得多 关键是Fi

我需要同时在不同的计算机上加载文件的内容。因为StreamReader将占用该文件,所以我想在打开它之前将其复制到一个临时文件夹中。(标题更为笼统,因为在一台计算机上运行的两个线程与两台分别运行一个线程的计算机之间应该没有区别。)


问题:即使复制目的地分开,两个线程同时复制一个文件是否会相互影响?

从多个线程/进程/机器读取一个文件是安全的,只要没有人同时写入该文件。

从多个线程/进程/机器读取一个文件是安全的,只要没有人同时写入文件。

不要这样做-在创建文件流时只使用正确的参数要容易得多

关键是
FileShare
设置-它表示您打开的文件允许进行哪些类型的操作。指定
FileShare.Read
,对同一文件执行任意数量的并发读取操作(也有
FileShare.Read
)都可以正常工作

这很简单

File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)

不要-在创建文件流时只使用正确的参数要容易得多

关键是
FileShare
设置-它表示您打开的文件允许进行哪些类型的操作。指定
FileShare.Read
,对同一文件执行任意数量的并发读取操作(也有
FileShare.Read
)都可以正常工作

这很简单

File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)

您的操作正在读取。这就像两个人同时读一本书。所以它是线程安全的


但是,如果您通过两个线程向文件写入一些注释,则它不是线程安全的。这就像两个人在一本文案里写笔记一样。它们只会相互干扰,字母将不正确,含义将不正确。

您的操作正在读取。这就像两个人同时读一本书。所以它是线程安全的


但是,如果您通过两个线程向文件写入一些注释,则它不是线程安全的。这就像两个人在一本文案里写笔记一样。它们只会相互干扰,字母将不正确,含义将不正确。

:“此类型的任何公共静态(在Visual Basic中共享)成员都是线程安全的”。因此,方法调用本身是线程安全的。但不确定“相互影响”是什么意思。线程安全,但效率不高:“此类型的任何公共静态(在Visual Basic中共享)成员都是线程安全的”。因此,方法调用本身是线程安全的。不知道“相互影响”是什么意思。线程安全,但效率不高。