VC控制台TCP 远程传输文件,fp=fopen(fname,"r")文件打不开

琼琼白兔12 2014-05-04 10:31:42
很简单的一个程序,请大家指点,我要把E:\\2014\\001.zip文件远程发送到服务器端,为什么程序运行后显示不能打开文件?文件和程序不在同一目录,我不想把文件加到程序目录下,因为我要发送的文件有很多个
void GetFile(char *fname)
{
FILE*fp;
int Filesize;
int i;
int count,total=0;
char buffer[100];
char Senddata[MAX_FILESIZE];
fp=fopen(fname,"r");
if(fp==NULL)
{
printf("不能打开文件\n");
}
............................................................
}
void main()
{
char sendfilename[30];
StartSock();
CallServer();
printf("连接成功!\n");
while(1)
{
CString Jpath;
static int index=0;
Jpath.Format(_T("E:\\2014\\%03d"),++index);
char *JpathZip=Jpath.GetBuffer(Jpath.GetLength()+1);
strcat(JpathZip,".zip");
GetFile(JpathZip);
TCPSendPacket(DataPacket);
}
closesocket(sock);
}
...全文
395 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-05-04
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
梦想照旧实现 2014-05-04
  • 打赏
  • 举报
回复
没有VC的环境,感觉错误应该是Jpath的buffer不够,导致strcat后的string不是你想要的结果。你可以在调用GetFile(JpathZip);前,打印一下JpathZip,看看是否正确。 char *JpathZip=Jpath.GetBuffer(Jpath.GetLength()+1); 修改为 char *JpathZip=Jpath.GetBuffer(Jpath.GetLength()+strlen(".zip")+1);
琼琼白兔12 2014-05-04
  • 打赏
  • 举报
回复
我试了几次,把文件跟程序放在同一目录就没问题。可是我有很多文件,想在E盘建个文件夹,然后再发送一个个的文件,怎么把不在同一目录下的文件发送出去呢?大家帮忙顶一顶啊
赵4老师 2014-05-04
  • 打赏
  • 举报
回复
引用 6 楼 u013728999 的回复:
[quote=引用 5 楼 zhao4zhong1 的回复:]
void GetFile(char *fname)
{
FILE*fp;
int Filesize;
int i;
int count,total=0;
char buffer[100];
char Senddata[MAX_FILESIZE];
fp=fopen(fname,"rb");
if(fp==NULL)
{
printf("不能打开文件[%s]\n",fname);
}
............................................................
}
void main()
{
char sendfilename[30];
StartSock();
CallServer();
printf("连接成功!\n");
   while(1)
   {
   CString Jpath;
   static int index=0;
   Jpath.Format(_T("E:\\2014\\%03d.zip"),++index);
   GetFile(Jpath);
   TCPSendPacket(DataPacket);
   }
   closesocket(sock);
}
运行时还是出现一样的问题,不行啊[/quote] 第12行输出啥,帖出来瞧瞧。或将输出中方括号括住的内容复制粘贴到资源管理器地址栏中,回车。确认一下对应文件真的存在吗?
琼琼白兔12 2014-05-04
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
void GetFile(char *fname)
{
FILE*fp;
int Filesize;
int i;
int count,total=0;
char buffer[100];
char Senddata[MAX_FILESIZE];
fp=fopen(fname,"rb");
if(fp==NULL)
{
printf("不能打开文件[%s]\n",fname);
}
............................................................
}
void main()
{
char sendfilename[30];
StartSock();
CallServer();
printf("连接成功!\n");
   while(1)
   {
   CString Jpath;
   static int index=0;
   Jpath.Format(_T("E:\\2014\\%03d.zip"),++index);
   GetFile(Jpath);
   TCPSendPacket(DataPacket);
   }
   closesocket(sock);
}
运行时还是出现一样的问题,不行啊
赵4老师 2014-05-04
  • 打赏
  • 举报
回复
void GetFile(char *fname)
{
FILE*fp;
int Filesize;
int i;
int count,total=0;
char buffer[100];
char Senddata[MAX_FILESIZE];
fp=fopen(fname,"rb");
if(fp==NULL)
{
printf("不能打开文件[%s]\n",fname);
}
............................................................
}
void main()
{
char sendfilename[30];
StartSock();
CallServer();
printf("连接成功!\n");
   while(1)
   {
   CString Jpath;
   static int index=0;
   Jpath.Format(_T("E:\\2014\\%03d.zip"),++index);
   GetFile(Jpath);
   TCPSendPacket(DataPacket);
   }
   closesocket(sock);
}
琼琼白兔12 2014-05-04
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
我觉得问题就出现在文件是否在程序的目录下,如果在,程序运行没问题。但我要把不在同一目录下的文件(E:\\2014\\001)远程传输,请问怎么做才不会出现上面的文件打不开的问题?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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