ArcObjectsでOpenFeatureClassを行うとエラー0x80040351

以下を実行するとOpenFeatureClassでエラーが発生

1
2
3
4
Geodatabase.IWorkspaceFactory workspaceFactory =
    new DataSourcesFile.ShapefileWorkspaceFactoryClass();
Geodatabase.IFeatureWorkspace featureWorkspace =                  (Geodatabase.IFeatureWorkspace)workspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(@"C:\work"), 0);
Geodatabase.IFeatureClass featureClass = featureWorkspace1.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(@"mypoint"));

以下を実行すると正しく動作する。違いはディレクトリの階層だけ。

1
2
3
4
Geodatabase.IWorkspaceFactory workspaceFactory =
new DataSourcesFile.ShapefileWorkspaceFactoryClass();
Geodatabase.IFeatureWorkspace featureWorkspace = (Geodatabase.IFeatureWorkspace)workspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(@"C:\work\test"), 0);
Geodatabase.IFeatureClass featureClass = featureWorkspace1.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(@"mypoint"));

問題は明らかにSystem.IO.Path.GetDirectoryNameなのでSystem.IO.Path.GetDirectoryNameにはShapeファイルのフルパスを渡す

1
2
3
4
Geodatabase.IWorkspaceFactory workspaceFactory =
new DataSourcesFile.ShapefileWorkspaceFactoryClass();
Geodatabase.IFeatureWorkspace featureWorkspace = (Geodatabase.IFeatureWorkspace)workspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(@"C:\work\mypoint.shp"), 0);
Geodatabase.IFeatureClass featureClass = featureWorkspace1.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(@"mypoint"));