如果我想用FileStream选择文件并制作副本,那么FileMode是什么?

时间:2012-08-31 12:37:54

标签: c# .net filestream

假设有一个功能

public void UploadSomewhere(FileStream fs)

如果我使用FileStream它还不足以指向文件路径,我还需要选择FileMode,如果您只是复制/移动文件,我不确定什么是正确的FileMode。有什么想法吗?

5 个答案:

答案 0 :(得分:2)

如果您想要使用FileStream,您只需使用打开作为源文件。

例如,

var fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);

对于目标文件,您必须决定如果存在会发生什么:

如果您拥有写入权限,

创建将允许您覆盖现有文件。

如果文件存在,

CreateNew 将抛出。同样,您需要写入权限。

但是,正如其他人所写,你可以完全跳过FileStream并使用File命令。

参考:http://msdn.microsoft.com/en-us/library/system.io.filemode.aspx

答案 1 :(得分:1)

如果您只是处理/移动文件,并且您已知道路径(根据我从问题中理解的那样),您根本不需要FieStream。使用File.MoveFile.Copy函数就足够了。

答案 2 :(得分:0)

请参阅http://msdn.microsoft.com/en-us/library/system.io.filemode.aspx

如果您只需要阅读该文件,我建议FileMode.Open

答案 3 :(得分:0)

如果您要复制文件FileMode.OpenFileAccess.Read

如果您想在此过程中共享对文件的访问权限,请同时指定FileShare选项。

请查看MSDN了解详情。

答案 4 :(得分:0)

如果您想使用FileStream复制文件,下面的示例应指向您正确的方式。

using (FileStream sourceFile = new FileStream("c:\\pathToSourceFile", FileMode.Open,FileAccess.Read))
{
    using (FileStream destFile = new FileStream("c:\\pathToDestinationFile", FileMode.Create))
    {
        int bufferSize = 65536;
        int bytesRead = -1;
        byte[] bytes = new byte[bufferSize];

        while ((bytesRead = sourceFile.Read(bytes, 0, bufferSize)) > 0)
        {
            destFile.Write(bytes, 0, bytesRead);
        }

    }
}