关于读取网络邻居TXT文件冲突的问题

asidifen1980 2014-07-15 11:51:46
			while(1)
{
Sleep(500);
cout<<"--开始读取20个位置----"<<endl;
if (duihua!=0) //读取1位置
{
ifstream file2a;
int LINES9;
char filename2a[]="\\\\sjk\\数据库\\1号情况.txt";
while (1)
{
file2a.open(filename2a, ios::in);
if (file2a.fail())
{
file2a.clear();//清除错误标志
}
else
break;
Sleep(90);
} //文件存在
LINES9 = CountLines(filename2a);
string * t1 = new string[LINES9];
string * t2 = new string[LINES9];
int j = 0;
while (!file2a.eof())
{ //读取数据到数组
if (j>=LINES9)
{
cout << "存在空格,程序退出!" << endl;
delete []t1;
delete []t2;
}
file2a >> t1[j];
file2a >> t2[j];
j++;
}
file2a.close();
weizhi[0]=t1[1];
zhiye[0]=t2[1];
delete []t1;
delete []t2;
}
break;
}


以上是代码,多个电脑读取1个电脑的某几个文件,但是常常会有莫名其妙的卡,卡在读文件的地方,求大神帮忙修改下代码,能顺利的读取这几个文件就行了,万分感谢!
...全文
107 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
asidifen1980 2014-07-15
  • 打赏
  • 举报
回复
求大神帮忙修改下,小弟水平有限。。。。。万分感谢
赵4老师 2014-07-15
  • 打赏
  • 举报
回复
我这个和MFC没半毛关系。 你不用看懂,只要用它写日志记录你代码执行到怀疑可能出问题的地方时相关各变量值即可。
asidifen1980 2014-07-15
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
有时不将“调用函数名字+各参数值,进入函数后各参数值,中间变量值,退出函数前准备返回的值,返回函数到调用处后函数名字+各参数值+返回值”这些信息写日志到文件中是无论如何也发现不了问题在哪里的,包括捕获各种异常、写日志到屏幕、单步或设断点或生成core文件、……这些方法都不行! 写日志到文件参考下面:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef WIN32
    #include <windows.h>
    #include <io.h>
#else
    #include <unistd.h>
    #include <sys/time.h>
    #include <pthread.h>
    #define  CRITICAL_SECTION   pthread_mutex_t
    #define  _vsnprintf         vsnprintf
#endif
//Log{
#define MAXLOGSIZE 20000000
#define MAXLINSIZE 16000
#include <time.h>
#include <sys/timeb.h>
#include <stdarg.h>
char logfilename1[]="MyLog1.log";
char logfilename2[]="MyLog2.log";
static char logstr[MAXLINSIZE+1];
char datestr[16];
char timestr[16];
char mss[4];
CRITICAL_SECTION cs_log;
FILE *flog;
#ifdef WIN32
void Lock(CRITICAL_SECTION *l) {
    EnterCriticalSection(l);
}
void Unlock(CRITICAL_SECTION *l) {
    LeaveCriticalSection(l);
}
#else
void Lock(CRITICAL_SECTION *l) {
    pthread_mutex_lock(l);
}
void Unlock(CRITICAL_SECTION *l) {
    pthread_mutex_unlock(l);
}
#endif
void LogV(const char *pszFmt,va_list argp) {
    struct tm *now;
    struct timeb tb;

    if (NULL==pszFmt||0==pszFmt[0]) return;
    _vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);
    ftime(&tb);
    now=localtime(&tb.time);
    sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
    sprintf(timestr,"%02d:%02d:%02d",now->tm_hour     ,now->tm_min  ,now->tm_sec );
    sprintf(mss,"%03d",tb.millitm);
    printf("%s %s.%s %s",datestr,timestr,mss,logstr);
    flog=fopen(logfilename1,"a");
    if (NULL!=flog) {
        fprintf(flog,"%s %s.%s %s",datestr,timestr,mss,logstr);
        if (ftell(flog)>MAXLOGSIZE) {
            fclose(flog);
            if (rename(logfilename1,logfilename2)) {
                remove(logfilename2);
                rename(logfilename1,logfilename2);
            }
        } else {
            fclose(flog);
        }
    }
}
void Log(const char *pszFmt,...) {
    va_list argp;

    Lock(&cs_log);
    va_start(argp,pszFmt);
    LogV(pszFmt,argp);
    va_end(argp);
    Unlock(&cs_log);
}
//Log}
int main(int argc,char * argv[]) {
    int i;
#ifdef WIN32
    InitializeCriticalSection(&cs_log);
#else
    pthread_mutex_init(&cs_log,NULL);
#endif
    for (i=0;i<10000;i++) {
        Log("This is a Log %04d from FILE:%s LINE:%d\n",i, __FILE__, __LINE__);
    }
#ifdef WIN32
    DeleteCriticalSection(&cs_log);
#else
    pthread_mutex_destroy(&cs_log);
#endif
    return 0;
}
//1-78行添加到你带main的.c或.cpp的那个文件的最前面
//81-85行添加到你的main函数开头
//89-93行添加到你的main函数结束前
//在要写LOG的地方仿照第87行的写法写LOG到文件MyLog1.log中
我写的不是MFC,看不懂MFC。
赵4老师 2014-07-15
  • 打赏
  • 举报
回复
有时不将“调用函数名字+各参数值,进入函数后各参数值,中间变量值,退出函数前准备返回的值,返回函数到调用处后函数名字+各参数值+返回值”这些信息写日志到文件中是无论如何也发现不了问题在哪里的,包括捕获各种异常、写日志到屏幕、单步或设断点或生成core文件、……这些方法都不行! 写日志到文件参考下面:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef WIN32
    #include <windows.h>
    #include <io.h>
#else
    #include <unistd.h>
    #include <sys/time.h>
    #include <pthread.h>
    #define  CRITICAL_SECTION   pthread_mutex_t
    #define  _vsnprintf         vsnprintf
#endif
//Log{
#define MAXLOGSIZE 20000000
#define MAXLINSIZE 16000
#include <time.h>
#include <sys/timeb.h>
#include <stdarg.h>
char logfilename1[]="MyLog1.log";
char logfilename2[]="MyLog2.log";
static char logstr[MAXLINSIZE+1];
char datestr[16];
char timestr[16];
char mss[4];
CRITICAL_SECTION cs_log;
FILE *flog;
#ifdef WIN32
void Lock(CRITICAL_SECTION *l) {
    EnterCriticalSection(l);
}
void Unlock(CRITICAL_SECTION *l) {
    LeaveCriticalSection(l);
}
#else
void Lock(CRITICAL_SECTION *l) {
    pthread_mutex_lock(l);
}
void Unlock(CRITICAL_SECTION *l) {
    pthread_mutex_unlock(l);
}
#endif
void LogV(const char *pszFmt,va_list argp) {
    struct tm *now;
    struct timeb tb;

    if (NULL==pszFmt||0==pszFmt[0]) return;
    _vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);
    ftime(&tb);
    now=localtime(&tb.time);
    sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
    sprintf(timestr,"%02d:%02d:%02d",now->tm_hour     ,now->tm_min  ,now->tm_sec );
    sprintf(mss,"%03d",tb.millitm);
    printf("%s %s.%s %s",datestr,timestr,mss,logstr);
    flog=fopen(logfilename1,"a");
    if (NULL!=flog) {
        fprintf(flog,"%s %s.%s %s",datestr,timestr,mss,logstr);
        if (ftell(flog)>MAXLOGSIZE) {
            fclose(flog);
            if (rename(logfilename1,logfilename2)) {
                remove(logfilename2);
                rename(logfilename1,logfilename2);
            }
        } else {
            fclose(flog);
        }
    }
}
void Log(const char *pszFmt,...) {
    va_list argp;

    Lock(&cs_log);
    va_start(argp,pszFmt);
    LogV(pszFmt,argp);
    va_end(argp);
    Unlock(&cs_log);
}
//Log}
int main(int argc,char * argv[]) {
    int i;
#ifdef WIN32
    InitializeCriticalSection(&cs_log);
#else
    pthread_mutex_init(&cs_log,NULL);
#endif
    for (i=0;i<10000;i++) {
        Log("This is a Log %04d from FILE:%s LINE:%d\n",i, __FILE__, __LINE__);
    }
#ifdef WIN32
    DeleteCriticalSection(&cs_log);
#else
    pthread_mutex_destroy(&cs_log);
#endif
    return 0;
}
//1-78行添加到你带main的.c或.cpp的那个文件的最前面
//81-85行添加到你的main函数开头
//89-93行添加到你的main函数结束前
//在要写LOG的地方仿照第87行的写法写LOG到文件MyLog1.log中
mujiok2003 2014-07-15
  • 打赏
  • 举报
回复
引用 11 楼 asidifen1980 的回复:
我这个必须重试,能否劳您大驾帮我写个重试版本的,你说的对,其实我的文件只有三行,读3次就行了
如果性能原因是网络的话,怎么优化代码都于事无补。所以, 请首先务必排除。
Sleep(500);
  cout<<"--开始读取20个位置----"<<endl;
  if (!duihua)
  {
    char const* filename2a="\\\\sjk\\数据库\\1号情况.txt";
    ifstream file2a(filename2a);
    /***keep retring**/
   while(!file2a.is_open()){
    Sleep(90);
     file2a.open(filename2a);
   }
    string t1, t2;
    file2a >> t1 >> t2;
    file2a >> t1 >> t2;
    if(file2a)
    {
      weizhi[0]=t1;
      zhiye[0]=t2;
    }
  }
asidifen1980 2014-07-15
  • 打赏
  • 举报
回复
引用 10 楼 mujiok2003 的回复:
你读了LINES9次, 但是其实只需要2次, 有几个没有必要的分支。 文件读取慢多半是网络原因。
我这个必须重试,能否劳您大驾帮我写个重试版本的,你说的对,其实我的文件只有三行,读3次就行了
mujiok2003 2014-07-15
  • 打赏
  • 举报
回复
你读了LINES9次, 但是其实只需要2次, 有几个没有必要的分支。 文件读取慢多半是网络原因。
mujiok2003 2014-07-15
  • 打赏
  • 举报
回复
引用 8 楼 asidifen1980 的回复:
[quote=引用 7 楼 mujiok2003 的回复:] 没有重试打开文件
 
 Sleep(500);
  cout<<"--开始读取20个位置----"<<endl;
  if (!duihua)
  {
    char const* filename2a="\\\\sjk\\数据库\\1号情况.txt";
    ifstream file2a(filename2a);
    string t1, t2;
    file2a >> t1 >> t2;
    file2a >> t1 >> t2;
    if(file2a)
    {
      weizhi[0]=t1;
      zhiye[0]=t2;
    }
  }
没看懂这段,这段也没重试[/quote] 要重试的话, 得分具体原因。 有些时候没有必要重试。
asidifen1980 2014-07-15
  • 打赏
  • 举报
回复
引用 7 楼 mujiok2003 的回复:
没有重试打开文件
 
 Sleep(500);
  cout<<"--开始读取20个位置----"<<endl;
  if (!duihua)
  {
    char const* filename2a="\\\\sjk\\数据库\\1号情况.txt";
    ifstream file2a(filename2a);
    string t1, t2;
    file2a >> t1 >> t2;
    file2a >> t1 >> t2;
    if(file2a)
    {
      weizhi[0]=t1;
      zhiye[0]=t2;
    }
  }
没看懂这段,这段也没重试
mujiok2003 2014-07-15
  • 打赏
  • 举报
回复
没有重试打开文件
 
 Sleep(500);
  cout<<"--开始读取20个位置----"<<endl;
  if (!duihua)
  {
    char const* filename2a="\\\\sjk\\数据库\\1号情况.txt";
    ifstream file2a(filename2a);
    string t1, t2;
    file2a >> t1 >> t2;
    file2a >> t1 >> t2;
    if(file2a)
    {
      weizhi[0]=t1;
      zhiye[0]=t2;
    }
  }
asidifen1980 2014-07-15
  • 打赏
  • 举报
回复
有人能帮我看看么

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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