C#解析EXCEL

一只写bug的程序猿 2018-01-15 01:55:43
程序定时扫描服务器指定路径下EXCEL文件,解析其内容,我有一个问题,如果EXCEL文件正在移动过程中(网络速度,移动速度等原因),程序就来解析,会不会报错,如果会,该怎么处理?
PS:我在本机做过测试,但是没有模拟出来。
...全文
255 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 11 楼 a364416036 的回复:
糊涂了,针对我自己这个需求,只需要在解析前判断是否是EXCEL文件就好了。 EXCEL传输过程中生成的临时文件是否是 .tmp?
腾讯系列软件是…………
  • 打赏
  • 举报
回复
糊涂了,针对我自己这个需求,只需要在解析前判断是否是EXCEL文件就好了。 EXCEL传输过程中生成的临时文件是否是 .tmp?
圣殿骑士18 2018-01-15
  • 打赏
  • 举报
回复
容错就是用try catch
cheng2005 2018-01-15
  • 打赏
  • 举报
回复
文件传完了记录一个传输完成的标识就可以了,这不是很正常吗... 至于记录在哪是你的自由了,是数据库或者同目录下文件或者别的方式。
  • 打赏
  • 举报
回复
引用 4 楼 xomix 的回复:
[quote=引用 2 楼 a364416036 的回复:] [quote=引用 1 楼 xomix 的回复:] [quote=引用 楼主 a364416036 的回复:] 程序定时扫描服务器指定路径下EXCEL文件,解析其内容,我有一个问题,如果EXCEL文件正在移动过程中(网络速度,移动速度等原因),程序就来解析,会不会报错,如果会,该怎么处理? PS:我在本机做过测试,但是没有模拟出来。
开始前确认文件存在即可,如果你读取的过程中移动会等你读取完毕再允许他移动,如果你读取完了文件还在不在也没有关系,这里有一个关键点是你是使用什么方法读取excel的。 第三方组件 com+ 数据库等方法不一样结果也不一样。[/quote] EXCEL文件是别的程序上传的,所以不可控,我担心我在解析EXCEL文件的时候刚好这个文件还没有上传完成。读取EXCEL的方式是OleDb[/quote] 有个笨办法,你在读取文件前先copy到本地一份……[/quote] copy到本地的话,我解析的路径要指向本地路径,但是copy的过程中程序开始解析excel文件,不是跟之前的一样吗?
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
会报错!因为搬运文件的软件一般都以独占方式工作 不过也有例外,你可以先尝试用读方式打开一下 不过 EXCEL文件 是一个包,在没有尾部封闭信息的情况下,是很难正确解析的 再者说,你的解析程序肯呢个会比传输程序快很多,当你处理到尚未传输过来的数据时,该做什么反应呢?
感谢版主,那么问题变成:怎么判断EXCEL文件已经传输完毕。
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
模拟类似的错误,可以这样写
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;

namespace ConsoleApp1
{
    class Program
    {

        static void Main(string[] args)
        {
            ThreadPool.QueueUserWorkItem(h => t1());
            ThreadPool.QueueUserWorkItem(h => t2());
            Console.WriteLine("................按任意键结束");
            Console.ReadKey();
        }

        static void t1()
        {
            for (var i = 0; i < 10; i++)
            {
                var content = Guid.NewGuid().ToString();
                File.WriteAllText("abc.txt", content);
                var line = File.ReadAllText("abc.txt");
                Debug.Assert(line == content);
            }
        }

        static void t2()
        {
            for (var i = 0; i < 1000; i++)
            {
                if (File.Exists("abc.txt"))
                    File.Delete("abc.txt");
            }
        }
    }
}
至于说“该如何处理?”,其实无需处理,你只要在程序的表现层(窗体的 Error 事件等地方)捕获异常并且给用户提示操作出错就行了。
感谢您的demo,我先跑一下试试。这程序是在服务器运行的,类似于“后台任务”,解析成功、失败都要移动到对应的文件夹,最好不要用户处理。
xuzuning 2018-01-15
  • 打赏
  • 举报
回复
会报错!因为搬运文件的软件一般都以独占方式工作 不过也有例外,你可以先尝试用读方式打开一下 不过 EXCEL文件 是一个包,在没有尾部封闭信息的情况下,是很难正确解析的 再者说,你的解析程序肯呢个会比传输程序快很多,当你处理到尚未传输过来的数据时,该做什么反应呢?
  • 打赏
  • 举报
回复
引用 2 楼 a364416036 的回复:
[quote=引用 1 楼 xomix 的回复:] [quote=引用 楼主 a364416036 的回复:] 程序定时扫描服务器指定路径下EXCEL文件,解析其内容,我有一个问题,如果EXCEL文件正在移动过程中(网络速度,移动速度等原因),程序就来解析,会不会报错,如果会,该怎么处理? PS:我在本机做过测试,但是没有模拟出来。
开始前确认文件存在即可,如果你读取的过程中移动会等你读取完毕再允许他移动,如果你读取完了文件还在不在也没有关系,这里有一个关键点是你是使用什么方法读取excel的。 第三方组件 com+ 数据库等方法不一样结果也不一样。[/quote] EXCEL文件是别的程序上传的,所以不可控,我担心我在解析EXCEL文件的时候刚好这个文件还没有上传完成。读取EXCEL的方式是OleDb[/quote] 有个笨办法,你在读取文件前先copy到本地一份……
  • 打赏
  • 举报
回复
模拟类似的错误,可以这样写
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;

namespace ConsoleApp1
{
    class Program
    {

        static void Main(string[] args)
        {
            ThreadPool.QueueUserWorkItem(h => t1());
            ThreadPool.QueueUserWorkItem(h => t2());
            Console.WriteLine("................按任意键结束");
            Console.ReadKey();
        }

        static void t1()
        {
            for (var i = 0; i < 10; i++)
            {
                var content = Guid.NewGuid().ToString();
                File.WriteAllText("abc.txt", content);
                var line = File.ReadAllText("abc.txt");
                Debug.Assert(line == content);
            }
        }

        static void t2()
        {
            for (var i = 0; i < 1000; i++)
            {
                if (File.Exists("abc.txt"))
                    File.Delete("abc.txt");
            }
        }
    }
}
至于说“该如何处理?”,其实无需处理,你只要在程序的表现层(窗体的 Error 事件等地方)捕获异常并且给用户提示操作出错就行了。
  • 打赏
  • 举报
回复
引用 1 楼 xomix 的回复:
[quote=引用 楼主 a364416036 的回复:] 程序定时扫描服务器指定路径下EXCEL文件,解析其内容,我有一个问题,如果EXCEL文件正在移动过程中(网络速度,移动速度等原因),程序就来解析,会不会报错,如果会,该怎么处理? PS:我在本机做过测试,但是没有模拟出来。
开始前确认文件存在即可,如果你读取的过程中移动会等你读取完毕再允许他移动,如果你读取完了文件还在不在也没有关系,这里有一个关键点是你是使用什么方法读取excel的。 第三方组件 com+ 数据库等方法不一样结果也不一样。[/quote] EXCEL文件是别的程序上传的,所以不可控,我担心我在解析EXCEL文件的时候刚好这个文件还没有上传完成。读取EXCEL的方式是OleDb
  • 打赏
  • 举报
回复
引用 楼主 a364416036 的回复:
程序定时扫描服务器指定路径下EXCEL文件,解析其内容,我有一个问题,如果EXCEL文件正在移动过程中(网络速度,移动速度等原因),程序就来解析,会不会报错,如果会,该怎么处理? PS:我在本机做过测试,但是没有模拟出来。
开始前确认文件存在即可,如果你读取的过程中移动会等你读取完毕再允许他移动,如果你读取完了文件还在不在也没有关系,这里有一个关键点是你是使用什么方法读取excel的。 第三方组件 com+ 数据库等方法不一样结果也不一样。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧