顶者有分,在线等待。盼各位给予帮忙,感激不尽!
! D:\AM_CDG20070323\test.rar: The file "???" header is corrupt
! D:\AM_CDG20070323\test.rar: The file "???" header is corrupt
! D:\AM_CDG20070323\test.rar: The file "???" header is corrupt
这个就是我在从FTP上复制到本地来解压时报的错误,刚刚忘记发错误信息上去了,还有就是我把这个文件直接复制上FTP,然后下载下来解压不会报错。
我在试了一下另处一个是WINDOWS的FTP服务器下载下来的就能正常解压。
真不知道这个要如何编码才能从Unix上下载下来后能正常解压.
在网上看了一下,是说要用二进制传送你们看看这个是转换成二进制吗
private void sendCommand(String command)
{
if ( this.verboseDebugging ) Debug.WriteLine(command,"FtpClient");
Byte[] cmdBytes = Encoding.ASCII.GetBytes( ( command + "\r\n" ).ToCharArray() );
clientSocket.Send( cmdBytes, cmdBytes.Length, 0);
this.readResponse();
}
至于用BAT我没找到资料.谁知道的指点一下,非常感激.
44 个解决方案
#1
不懂,學習下,幫頂
#2
应该不是这个命令格式的问题,因为txt文件都可以正常下载回来了,我记得ftp有一个命令,应该是binary,可以把传送的数据设为2进制模式,并不是说把命令使用2进制编码后发送。
#3
帮顶
#4
学习,顶下
#5
开三帖了?哪来那么多分?
#6
建议你找个标准的FTP服务器测试一下
#7
关注。
#8
ftp是有二进制传输方式的,是把传送的数据设为2进制模式,这个如果使用flaxfxp这样的工具的话也可以看出都会有这个选项的
#9
ftp
>open ***.**.***.**
>USER:****
>PASSED:*******
>binary (设置为2进制模式传输,否则会把<CR>翻译成<CR><LF>)
>get test.rar
>open ***.**.***.**
>USER:****
>PASSED:*******
>binary (设置为2进制模式传输,否则会把<CR>翻译成<CR><LF>)
>get test.rar
#10
Unix 和 WINDOWS 的编码方式是相同的吗,他们一次性是否处理的数据位是相同长度?
其中涉及了压缩算法和解压算法的问题,要先确立个转换的思路哟 ^_^
其中涉及了压缩算法和解压算法的问题,要先确立个转换的思路哟 ^_^
#11
丿
#12
建议你找个标准的FTP服务器
是不是通信协议不对
是不是通信协议不对
#13
帮顶!
#14
比较诡异,
建议单步跟进去看一看,把每个包抓下来
建议单步跟进去看一看,把每个包抓下来
#15
学习了
#16
linux/unix的FTP默认为文本传输
所有文本文件下载后的CR都会被增加换行符号变成CR+LF,这就导致文件被追加了内容无法打开
上传会把CR+LF缩写变成CR
所以一定要设置binary二进制传输方式
所有文本文件下载后的CR都会被增加换行符号变成CR+LF,这就导致文件被追加了内容无法打开
上传会把CR+LF缩写变成CR
所以一定要设置binary二进制传输方式
#17
支持一下
#18
楼主试着把test.rar文件改为test.txt看看效果?(下到本地在改回来解压看看)
#19
路过,顶一下
#20
up
#21
老板分多啊
#22
想不出会有什么原因.
#23
不懂,帮顶
#24
帮顶
#25
使用TCPClient.networkstream()是上传
#26
不知道帮顶,文件头不对?
#27
bat很简单:
REM 创建需要的变量,你修改成你自己的就可以了,这样你就不需要修改下面的代码了
set xdir=c:\
set ftpip=10.0.6.24
set user=movie
set pass=movie
set updir=abc
set filname=20070209.wmv
REM 检测服务器是否有生成需要的文件
if not exist %xdir%%filname% goto :EOF
open %ftpip% > tmp.txt
User %user% %pass%>> tmp.txt
bin >> tmp.txt
cd %updir% >> tmp.txt
lcd %xdir% >> tmp.txt
put >> tmp.txt
%filnam% >> tmp.txt
%filnam% >> tmp.txt
bye >> tmp.txt
ftp -n -s:tmp.txt
REM 创建需要的变量,你修改成你自己的就可以了,这样你就不需要修改下面的代码了
set xdir=c:\
set ftpip=10.0.6.24
set user=movie
set pass=movie
set updir=abc
set filname=20070209.wmv
REM 检测服务器是否有生成需要的文件
if not exist %xdir%%filname% goto :EOF
open %ftpip% > tmp.txt
User %user% %pass%>> tmp.txt
bin >> tmp.txt
cd %updir% >> tmp.txt
lcd %xdir% >> tmp.txt
put >> tmp.txt
%filnam% >> tmp.txt
%filnam% >> tmp.txt
bye >> tmp.txt
ftp -n -s:tmp.txt
#28
没搞过..
#29
帮顶了
#30
老大,我看了你的文件FTPFactory.cs,里面有一个方法,
public void setBinaryMode(Boolean mode)
设一下就行了啊.
public void setBinaryMode(Boolean mode)
设一下就行了啊.
#31
下载文件前先确定它的传输连接模式:
"TYPE I";//binary类型传输
" TYPE A";//ASCII类型传输
"TYPE I";//binary类型传输
" TYPE A";//ASCII类型传输
#32
mark
#33
学习~~UP
#34
学习~~UP
#35
同意用这个方法测试下
#36
那我就帮顶了.
#37
学习下,再顶下
#38
不懂Unix
#39
绑定一下。
#40
可能是取得文件有问题!
stream1 = client1.GetStream();
byte[] buffer1 = new byte[FTPConnection.BLOCK_SIZE];
int num2 = 0;
bool flag1 = true;
while (flag1)
{
num2 = stream1.Read(buffer1, 0, buffer1.Length);
pStream.Write(buffer1, 0, num2);
if (num2 == 0)
{
flag1 = false;
}
}
pStream.Close();
stream1.Close();
client1.Close();
stream1 = client1.GetStream();
byte[] buffer1 = new byte[FTPConnection.BLOCK_SIZE];
int num2 = 0;
bool flag1 = true;
while (flag1)
{
num2 = stream1.Read(buffer1, 0, buffer1.Length);
pStream.Write(buffer1, 0, num2);
if (num2 == 0)
{
flag1 = false;
}
}
pStream.Close();
stream1.Close();
client1.Close();
#41
你先确定上传的压缩文件和你本机的文件是否大小相同
clientSocket.Send( cmdBytes, cmdBytes.Length, 0); 这句我觉得与问题。send以后未必已经完全发送
clientSocket.Send( cmdBytes, cmdBytes.Length, 0); 这句我觉得与问题。send以后未必已经完全发送
#42
帮你顶顶
#43
private void sendCommand(String command)
{
if (this.verboseDebugging) Debug.WriteLine(command, "FtpClient ");
Byte[] cmdBytes = Encoding.Unicode.GetString((command + "\r\n ").ToCharArray());
clientSocket.Send(cmdBytes, cmdBytes.Length, 0);
this.readResponse();
}
{
if (this.verboseDebugging) Debug.WriteLine(command, "FtpClient ");
Byte[] cmdBytes = Encoding.Unicode.GetString((command + "\r\n ").ToCharArray());
clientSocket.Send(cmdBytes, cmdBytes.Length, 0);
this.readResponse();
}
#44
#1
不懂,學習下,幫頂
#2
应该不是这个命令格式的问题,因为txt文件都可以正常下载回来了,我记得ftp有一个命令,应该是binary,可以把传送的数据设为2进制模式,并不是说把命令使用2进制编码后发送。
#3
帮顶
#4
学习,顶下
#5
开三帖了?哪来那么多分?
#6
建议你找个标准的FTP服务器测试一下
#7
关注。
#8
ftp是有二进制传输方式的,是把传送的数据设为2进制模式,这个如果使用flaxfxp这样的工具的话也可以看出都会有这个选项的
#9
ftp
>open ***.**.***.**
>USER:****
>PASSED:*******
>binary (设置为2进制模式传输,否则会把<CR>翻译成<CR><LF>)
>get test.rar
>open ***.**.***.**
>USER:****
>PASSED:*******
>binary (设置为2进制模式传输,否则会把<CR>翻译成<CR><LF>)
>get test.rar
#10
Unix 和 WINDOWS 的编码方式是相同的吗,他们一次性是否处理的数据位是相同长度?
其中涉及了压缩算法和解压算法的问题,要先确立个转换的思路哟 ^_^
其中涉及了压缩算法和解压算法的问题,要先确立个转换的思路哟 ^_^
#11
丿
#12
建议你找个标准的FTP服务器
是不是通信协议不对
是不是通信协议不对
#13
帮顶!
#14
比较诡异,
建议单步跟进去看一看,把每个包抓下来
建议单步跟进去看一看,把每个包抓下来
#15
学习了
#16
linux/unix的FTP默认为文本传输
所有文本文件下载后的CR都会被增加换行符号变成CR+LF,这就导致文件被追加了内容无法打开
上传会把CR+LF缩写变成CR
所以一定要设置binary二进制传输方式
所有文本文件下载后的CR都会被增加换行符号变成CR+LF,这就导致文件被追加了内容无法打开
上传会把CR+LF缩写变成CR
所以一定要设置binary二进制传输方式
#17
支持一下
#18
楼主试着把test.rar文件改为test.txt看看效果?(下到本地在改回来解压看看)
#19
路过,顶一下
#20
up
#21
老板分多啊
#22
想不出会有什么原因.
#23
不懂,帮顶
#24
帮顶
#25
使用TCPClient.networkstream()是上传
#26
不知道帮顶,文件头不对?
#27
bat很简单:
REM 创建需要的变量,你修改成你自己的就可以了,这样你就不需要修改下面的代码了
set xdir=c:\
set ftpip=10.0.6.24
set user=movie
set pass=movie
set updir=abc
set filname=20070209.wmv
REM 检测服务器是否有生成需要的文件
if not exist %xdir%%filname% goto :EOF
open %ftpip% > tmp.txt
User %user% %pass%>> tmp.txt
bin >> tmp.txt
cd %updir% >> tmp.txt
lcd %xdir% >> tmp.txt
put >> tmp.txt
%filnam% >> tmp.txt
%filnam% >> tmp.txt
bye >> tmp.txt
ftp -n -s:tmp.txt
REM 创建需要的变量,你修改成你自己的就可以了,这样你就不需要修改下面的代码了
set xdir=c:\
set ftpip=10.0.6.24
set user=movie
set pass=movie
set updir=abc
set filname=20070209.wmv
REM 检测服务器是否有生成需要的文件
if not exist %xdir%%filname% goto :EOF
open %ftpip% > tmp.txt
User %user% %pass%>> tmp.txt
bin >> tmp.txt
cd %updir% >> tmp.txt
lcd %xdir% >> tmp.txt
put >> tmp.txt
%filnam% >> tmp.txt
%filnam% >> tmp.txt
bye >> tmp.txt
ftp -n -s:tmp.txt
#28
没搞过..
#29
帮顶了
#30
老大,我看了你的文件FTPFactory.cs,里面有一个方法,
public void setBinaryMode(Boolean mode)
设一下就行了啊.
public void setBinaryMode(Boolean mode)
设一下就行了啊.
#31
下载文件前先确定它的传输连接模式:
"TYPE I";//binary类型传输
" TYPE A";//ASCII类型传输
"TYPE I";//binary类型传输
" TYPE A";//ASCII类型传输
#32
mark
#33
学习~~UP
#34
学习~~UP
#35
同意用这个方法测试下
#36
那我就帮顶了.
#37
学习下,再顶下
#38
不懂Unix
#39
绑定一下。
#40
可能是取得文件有问题!
stream1 = client1.GetStream();
byte[] buffer1 = new byte[FTPConnection.BLOCK_SIZE];
int num2 = 0;
bool flag1 = true;
while (flag1)
{
num2 = stream1.Read(buffer1, 0, buffer1.Length);
pStream.Write(buffer1, 0, num2);
if (num2 == 0)
{
flag1 = false;
}
}
pStream.Close();
stream1.Close();
client1.Close();
stream1 = client1.GetStream();
byte[] buffer1 = new byte[FTPConnection.BLOCK_SIZE];
int num2 = 0;
bool flag1 = true;
while (flag1)
{
num2 = stream1.Read(buffer1, 0, buffer1.Length);
pStream.Write(buffer1, 0, num2);
if (num2 == 0)
{
flag1 = false;
}
}
pStream.Close();
stream1.Close();
client1.Close();
#41
你先确定上传的压缩文件和你本机的文件是否大小相同
clientSocket.Send( cmdBytes, cmdBytes.Length, 0); 这句我觉得与问题。send以后未必已经完全发送
clientSocket.Send( cmdBytes, cmdBytes.Length, 0); 这句我觉得与问题。send以后未必已经完全发送
#42
帮你顶顶
#43
private void sendCommand(String command)
{
if (this.verboseDebugging) Debug.WriteLine(command, "FtpClient ");
Byte[] cmdBytes = Encoding.Unicode.GetString((command + "\r\n ").ToCharArray());
clientSocket.Send(cmdBytes, cmdBytes.Length, 0);
this.readResponse();
}
{
if (this.verboseDebugging) Debug.WriteLine(command, "FtpClient ");
Byte[] cmdBytes = Encoding.Unicode.GetString((command + "\r\n ").ToCharArray());
clientSocket.Send(cmdBytes, cmdBytes.Length, 0);
this.readResponse();
}