1

我有一个带有“GetNewsFeed”方法的类,当请求页面时:

  • 检查文件是否存在并且不到 30 分钟
    • 如果确实存在,则读取文件的内容,将内容推送到页面上
    • 如果它存在,转到一个 URL 并将该页面的内容写入 .txt 文件,将内容推送到页面上

我不太精通 C#,所以我试图拼凑一些来源。我相信我已经接近了,但如果需要,我无法让文件每 30 分钟刷新一次(我没有收到任何编译错误或任何东西)。任何帮助,将不胜感激。

public static string GetNewsFeed(string url, string fileName)
{
    // Set the path to the cache file
    String filePath = HttpContext.Current.Server.MapPath("/cachefeed/" + fileName + ".txt");
    string fileContents = "";

    // If the file exists & is less than 30 minutes old, read from the file.
    if (File.Exists(filePath) && (File.GetLastWriteTime(filePath) > DateTime.Now.AddMinutes(-30)))
    {
        fileContents = File.ReadAllText(filePath);
    }

    else
    {
        try
        {
            // If the file is older than 30 minutes, go out and download a fresh copy
            using (var client = new WebClient())
            {
                // Delete and write the file again
                fileContents = client.DownloadString(url);
                File.Delete(filePath);
                File.WriteAllText(filePath, fileContents);
            }
        }

        catch (Exception)
        {
            if (File.Exists(filePath))
            {
                fileContents = File.ReadAllText(filePath);
            }
        }
    }

    return fileContents;
}

最后,我在别处有一些代码可以读取这些文本文件并将其内容处理到页面上。我对此没有任何问题。

4

2 回答 2

4

奇怪的是,您在 else 块中捕获了一个异常,它只返回文件内容。尝试在异常块中放置一个断点以查看发生了什么。

您需要将其更改为:

 catch( Exception e )

为了得到这个信息。

另外,你不需要这个:

            File.Delete(filePath);

WriteAllText 方法将覆盖已经存在的文件。尝试删除该行并检查您的目录权限。

您可能还想更改

 (File.GetLastWriteTime(filePath) > DateTime.Now.AddMinutes(-30)))

 (DateTime.Now - File.GetLastWriteTime(filePath)).TotalMinutes > 30
于 2013-06-13T13:40:55.010 回答
0

我添加了一个,不管throwcatch信不信,我传递给我的方法的 URL 之一是无效的。所以是的,我的代码中的罪魁祸首是 catch 语句。

我解决了这个问题,一切正常。

感谢大家的提示。

于 2013-06-13T17:35:17.263 回答