加载带有delphi的目录中包含空格的全名文件时出错

时间:2016-05-20 11:15:44

标签: delphi io stream

我正在使用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;  

1 个答案:

答案 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),除以下内容

         
        
    • 以下保留字符:

           
          
      • < (小于)
      •   
      • > (大于)
      •   
      • :(冒号)
      •   
      • “(双引号)
      •   
      • /(正斜线)
      •   
      • \(反斜杠)
      •   
      • | (竖杆或竖管)
      •   
      • ? (问号)
      •   
      • *(星号)
      •   
    •   
    • ...
    •   
  •   
  • ...
  •   

在下面的评论中,您指出问题中的代码并未反映您的实际问题。这让我想知道你希望我们如何提供帮助。您真正的问题不是特定代码产生的错误消息,而是您的调试技能让您失望。让我试着解释如何调试这样的问题。

首先,您要将文件名传递给LoadFromFileTFileStream.Create。这些调用失败,并显示一个错误,指示文件名无效。

因此,当面对这些知识时,第一步是检查您传递的文件名的值。使用调试技术来做到这一点。 IDE调试器或日志记录。

一旦确定了实际传递给这些函数的值,您就可以尝试找出它的无效值。

重复一遍,你真正的问题不在于具体细节,而在于你的调试技巧。您应该以此为契机,了解有关调试的更多信息。 Stack Overflow不能代替调试。学会更好地调试,作为程序员的生活将变得更加容易。