我可以检查下载的文件是否包含数据吗?

时间:2014-03-28 11:04:51

标签: c# asp.net asp.net-mvc-3

我正在尝试做什么,sourcepath是文档的文件路径。 1)测试文件是否存在,如果它没有抛出异常 2)所以现在我们知道文件存在(并且因为文件是从其他地方下载的)检查它是否包含数据。 (因为它不应该是空的),如果它是空的抛出错误,....这将用于检查文件是否为空?

string sourcePath = "C:\Users\Martin\Desktop\document5.docx";

if (!File.Exists(sourcePath))
{
//throw exception
}

if (string.IsNullOrEmpty(sourcePath))
{
//throw exception
}

3 个答案:

答案 0 :(得分:4)

您的代码只会检查(a)文件是否存在于磁盘上(不必有任何数据)或(b)路径中是否包含某些内容。

要准确测试文件是否包含数据,您可以使用:

var file = new FileInfo(sourcePath);
if (file.Length == 0)
{
//throw exception
}

此处有更多信息......

http://msdn.microsoft.com/en-us/library/system.io.fileinfo.length(v=vs.110).aspx


顺便说一下,你在第一行声明的路径不起作用。您需要转义字符串才能将其视为有效路径,因此请更改:

string sourcePath = "C:\Users\Martin\Desktop\document5.docx";

到此:

string sourcePath = @"C:\Users\Martin\Desktop\document5.docx";

答案 1 :(得分:0)

鉴于您对数据来源​​的评论;只需编辑该代码

// taken from example linked in comment
public long download(string remoteFile, string localFile)
{
    long totalBytes = 0;
    try
    {
        // ...blah
        try
        {
            while (bytesRead > 0)
            {
                localFileStream.Write(byteBuffer, 0, bytesRead);
                totalBytes += bytesRead;
                bytesRead = ftpStream.Read(byteBuffer, 0, bufferSize);
            }
        }
        // ...blah
    }
    catch (Exception ex) { Console.WriteLine(ex.ToString()); }
    return totalBytes;
}

并检查是返回零还是非零。此外,这是非常可怕的异常处理(在这里我使用"处理" 非常错误)。

答案 2 :(得分:0)

您可以通过它length进行检查。

FileInfo fileInfo = new FileInfo(sourcePath);

if (fileInfo.Length > 0)
{
  // file has content. file downloaded. 
}
else
{
  //throw exception
}