我正在使用XE8,赢得8.1。
当尝试加载目录中包含空格的文件时,我得到文件或目录的语法名称的例外无效。 如果我使用imageen对话框预览文件,则找不到错误。
我用过程load_file1和load_file2进行了两次测试,我遇到了同样的问题。
是否有解决问题的方法?
function get_file:string;
begin
result:='"C:\Compartilhada\dicomserver versoes\dicomserverx\data\Genesis-1000\1.2.410.200013.1.215.1.200912141600580009_0001_000001_13061821270002.dcm"'
end;
procedure load_file1;
var fStm:Tstream;
p1:string;
begin
p1:=get_file;
fStm := tFileStream.Create( p1, fmOpenRead or fmShareDenyNone ); //->Error Here
try
TBlobField(FieldByName('dicom')).LoadFromStream(fStm);
Post;
finally
fSTm.Free;
end;
end;
procedure load_file2;
p1:string;
begin
p1:=get_file;
TBlobField(FieldByName('dicom')).LoadFromFile(p1); //-->Error Here
Post;
end;
答案 0 :(得分:1)
从字符串中删除双引号。它应该是:
'C:\Compartilhada\dicomserver versoes\dicomserverx\data\Genesis-1000\1.2.410.200013.1.215.1.200912141600580009_0001_000001_13061821270002.dcm'
在某些情况下,您可以将"
用于包含空格的路径,例如命令解释程序。但在API级别,根本不需要它。事实上,你发现这是一个错误。双引号字符"
实际上是文件名中的保留字符。这在MSDN上有记录:
Naming Files, Paths, and Namespaces: Naming Conventions
以下基本规则使应用程序能够创建和处理文件和目录的有效名称,而不管文件系统如何:
- ...
使用当前代码页中的任何字符作为名称,包括扩展字符集中的Unicode字符和字符(128-255),除以下内容:
以下保留字符:
- < (小于)
- > (大于)
- :(冒号)
- “(双引号)
- /(正斜线)
- \(反斜杠)
- | (竖杆或竖管)
- ? (问号)
- *(星号)
- ...
- ...
在下面的评论中,您指出问题中的代码并未反映您的实际问题。这让我想知道你希望我们如何提供帮助。您真正的问题不是特定代码产生的错误消息,而是您的调试技能让您失望。让我试着解释如何调试这样的问题。
首先,您要将文件名传递给LoadFromFile
或TFileStream.Create
。这些调用失败,并显示一个错误,指示文件名无效。
因此,当面对这些知识时,第一步是检查您传递的文件名的值。使用调试技术来做到这一点。 IDE调试器或日志记录。
一旦确定了实际传递给这些函数的值,您就可以尝试找出它的无效值。
重复一遍,你真正的问题不在于具体细节,而在于你的调试技巧。您应该以此为契机,了解有关调试的更多信息。 Stack Overflow不能代替调试。学会更好地调试,作为程序员的生活将变得更加容易。